Skip to main content

Using Cookie Images Instead of Shapes

Instead of drawing the cookie as a brown circle with an emoji, you can use an actual cookie image file. This guide shows you how to load and display images in p5.js!

What You'll Learn

  • How to use the preload() function
  • How to load images from the web or your computer
  • How to display images at the center of the canvas
  • How to scale images with animations

Understanding preload()

The preload() function runs before setup() and is perfect for loading files like images, sounds, and fonts. This ensures everything is ready before your program starts.

function preload() {
// Load images here
cookieImage = loadImage('URL_TO_YOUR_IMAGE_HERE');
}

Breaking it down:

  • preload() is a special p5.js function that runs first
  • loadImage() loads an image from a URL or file path
  • We store it in the cookieImage variable so we can use it in draw()

Option 1: Use an Image from the Web

Find a cookie image online (a good cookie PNG with transparency):

function preload() {
cookieImage = loadImage('https://images.unsplash.com/photo-1499636136210-6f4ee915583e?w=400');
}

Recommended sources:

Option 2: Upload an Image in p5.js Editor

  1. In the p5.js Web Editor, click the file icon (folder icon) in the top-left
  2. Click "Upload file"
  3. Choose your cookie image file
  4. Use the uploaded image path:
function preload() {
cookieImage = loadImage('cookie.png'); // Use your filename
}

Drawing the Image

Basic Image Display

Add a cookieImage variable at the top and update your draw() function:

let cookieImage;

function preload() {
cookieImage = loadImage('https://images.unsplash.com/photo-1499636136210-6f4ee915583e?w=400');
}

function draw() {
background(240, 230, 220);

// Draw the cookie image at the center
push();
imageMode(CENTER);
image(cookieImage, width/2, height/2, 150, 150);
pop();

// Display score
fill(0);
textSize(36);
textAlign(CENTER);
text(score + ' cookies', width/2, 50);
}

Breaking it down:

push() and pop()

push();
// ... drawing code ...
pop();
  • push() saves the current drawing settings (colors, transformations, etc.)
  • pop() restores those settings to how they were before push()
  • This keeps our image settings from affecting other drawings

imageMode(CENTER)

imageMode(CENTER);
  • By default, image() positions the top-left corner at the coordinates
  • imageMode(CENTER) positions the center of the image at the coordinates
  • This makes it easier to center the image on the canvas

Drawing the Image

image(cookieImage, width/2, height/2, 150, 150);
  • cookieImage - The image to display
  • width/2 - X position (horizontal center)
  • height/2 - Y position (vertical center)
  • 150 - Width in pixels
  • 150 - Height in pixels

Adding Animation

You can animate the image size just like before! Update your variables:

let cookieImage;
let cookieSize = 150;
let score = 0;

function preload() {
cookieImage = loadImage('https://images.unsplash.com/photo-1499636136210-6f4ee915583e?w=400');
}

function draw() {
background(240, 230, 220);

// Grow the cookie back to normal size
if (cookieSize < 150) {
cookieSize += 2;
}

// Draw the animated cookie image
push();
imageMode(CENTER);
image(cookieImage, width/2, height/2 - 50, cookieSize, cookieSize);
pop();

// Display score
fill(0);
textSize(36);
textAlign(CENTER);
text(score + ' cookies', width/2, 50);
}

function mousePressed() {
// Check if cookie is clicked
let d = dist(mouseX, mouseY, width/2, height/2 - 50);

if (d < 75) { // 75 is the radius
score++;
cookieSize = 135; // Shrink the cookie
}
}

Complete Code with Image

Here's how to modify the complete code to use an image:

// Global variables
let score = 0;
let cookieSize = 150;
let cookieImage;
let floatingTexts = [];
let autoClickers = 0;
let autoClickerCost = 10;
let buttonX, buttonY;
let buttonWidth = 200;
let buttonHeight = 60;
let particles = [];

function preload() {
// Load the cookie image from the web
cookieImage = loadImage('https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT-0fda82kJu_k4skgYTqbZFam6J6zaK6bw2A&s');
}

function setup() {
createCanvas(800, 600);
buttonX = width/2 - buttonWidth/2;
buttonY = height - 120;
}

function draw() {
background(240, 230, 220);

// Auto-generate cookies every second
if (frameCount % 60 === 0 && autoClickers > 0) {
score += autoClickers;
}

// Cookie animation - smoothly grow back to normal size
if (cookieSize < 150) {
cookieSize += 2;
}

// Draw the cookie image
push();
imageMode(CENTER);
image(cookieImage, width/2, height/2 - 50, cookieSize, cookieSize);
pop();

// ... rest of your draw code (floating texts, particles, buttons, etc.)
}

function mousePressed() {
// Check if cookie is clicked
let d = dist(mouseX, mouseY, width/2, height/2 - 50);

if (d < 75) { // 75 is the radius
score++;
cookieSize = 135;

// Create floating text and particles...
}

// ... rest of your mousePressed code
}
Finding Good Cookie Images

Look for:

  • ✅ PNG format with transparent background (looks better)
  • ✅ Square images (easier to scale)
  • ✅ High resolution (scales down nicely)
  • ✅ Perspective shot that looks good at small sizes
Image Performance
  • Images from the web need an internet connection
  • For faster loading, upload images to the p5.js editor
  • Keep image files under 500KB for best performance
Customization Ideas
  • Use different cookie images based on score milestones
  • Animate the rotation with the rotate() function
  • Add shadows using darker images or canvas effects
  • Use a golden glow with filters

Common Issues

Image Not Loading?

Problem: You see a blank space instead of your image.

Solutions:

  • Check the image URL is correct and accessible
  • Make sure preload() is spelled correctly
  • Try a different image URL
  • Check your browser console for error messages (F12)

Image is Blurry?

Problem: The image looks pixelated or unclear.

Solutions:

  • Use a higher resolution image
  • Don't scale the image larger than its original size
  • Try a different cookie image

Click Detection Doesn't Work?

Problem: Clicking the image doesn't register.

Explanation: The click detection uses a circular area (dist() calculates distance), not the image shape. If your cookie image is very non-circular, the click area might feel wrong.

Solution: Adjust the click radius (75 in the example) to match your image better.

Next Steps

Now that you have a beautiful cookie image:

  • 🎨 Try different cookie images
  • 🎯 Adjust the click detection radius for your specific image
  • ✨ Add rotation or other effects using p5.js transformations
  • 🎮 Apply this technique to other game elements!