Skip to content

How to control one sprite from another sprite in Scratch

💡 Need help with sprite communication and interaction? Struggling with broadcasts and variables? 🚀 Get Help Now

CA

CodeMaster_Alex

Posted on January 23, 2024 • Beginner

🎮 How to make one sprite control another?

I’m working on a game where I need Sprite1 to control Sprite2’s behavior. Specifically, I want to:

  • Hide or show Sprite2 from Sprite1’s script
  • Change Sprite2’s properties dynamically
  • Make Sprite2 respond to events triggered by Sprite1

Is there a way to directly control one sprite from another? I’ve heard about broadcasts but I’m not sure how to use them effectively. Any help would be appreciated! 🤔

SP

SpriteProMaster

Replied 30 minutes later • ⭐ Best Answer

Excellent question @CodeMaster_Alex! There are several powerful ways to control sprites from other sprites. Let me show you the most effective methods:

📡 Method 1: Using Broadcasts (Recommended)

Broadcasts are the most common and flexible way to communicate between sprites:

In Sprite1 (Controller):

    when flag clicked
wait [2] seconds
broadcast [hide sprite2 v]

when [space v] key pressed
broadcast [show sprite2 v]

when this sprite clicked
broadcast [make sprite2 dance v]
  

In Sprite2 (Controlled):

    when I receive [hide sprite2 v]
hide

when I receive [show sprite2 v]
show

when I receive [make sprite2 dance v]
repeat [5]
turn right [36] degrees
wait [0.1] seconds
end
  

🔢 Method 2: Using Variables for State Control

Create a variable that both sprites can access to control behavior:

Create a variable called “Sprite2 State” for all sprites

In Sprite1:

    when flag clicked
set [Sprite2 State v] to [visible]

when [h v] key pressed
set [Sprite2 State v] to [hidden]

when [s v] key pressed
set [Sprite2 State v] to [visible]

when [d v] key pressed
set [Sprite2 State v] to [dancing]
  

In Sprite2:

    when flag clicked
forever
if <(Sprite2 State) = [hidden]> then
hide
else
if <(Sprite2 State) = [visible]> then
show
stop [other scripts in sprite v]
else
if <(Sprite2 State) = [dancing]> then
show
repeat [10]
turn right [36] degrees
wait [0.1] seconds
end
set [Sprite2 State v] to [visible]
end
end
end
end
  

👥 Method 3: Using Clones for Dynamic Control

If you want to “delete” and recreate sprites dynamically:

In Sprite1:

    when flag clicked
// Create initial clone
broadcast [create sprite2 clone v]

when [x v] key pressed
// Remove current clone
broadcast [delete sprite2 clone v]
wait [0.1] seconds
// Create new clone
broadcast [create sprite2 clone v]
  

In Sprite2 (make sure to hide the original):

    when flag clicked
hide // Hide the original sprite

when I receive [create sprite2 clone v]
create clone of [myself v]

when I start as a clone
show
go to x: [0] y: [0]
// Add any initialization code here

when I receive [delete sprite2 clone v]
if <(clone?) = [true]> then
delete this clone
end
  

🎨 Method 4: Advanced Property Control

Control multiple properties of Sprite2 from Sprite1:

In Sprite1:

    when flag clicked
broadcast [setup sprite2 v] and wait

when [1 v] key pressed
broadcast [sprite2 red v]

when [2 v] key pressed
broadcast [sprite2 blue v]

when [up arrow v] key pressed
broadcast [sprite2 bigger v]

when [down arrow v] key pressed
broadcast [sprite2 smaller v]
  

In Sprite2:

    when I receive [setup sprite2 v]
show
set size to [100] %
set [color v] effect to [0]

when I receive [sprite2 red v]
set [color v] effect to [0]

when I receive [sprite2 blue v]
set [color v] effect to [50]

when I receive [sprite2 bigger v]
change size by [10]

when I receive [sprite2 smaller v]
change size by [-10]
  

🚀 Method 5: Two-Way Communication

Make sprites communicate back and forth:

In Sprite1:

    when flag clicked
broadcast [ask sprite2 status v] and wait

when I receive [sprite2 ready v]
say [Sprite2 is ready!] for [2] seconds
broadcast [start game v]

when I receive [sprite2 finished v]
say [Great job Sprite2!] for [2] seconds
  

In Sprite2:

    when I receive [ask sprite2 status v]
wait [1] seconds
broadcast [sprite2 ready v]

when I receive [start game v]
repeat [5]
move [10] steps
wait [0.5] seconds
end
broadcast [sprite2 finished v]
  

💡 Pro Tips:

  • Use descriptive broadcast names like “player collected coin” instead of just “coin”
  • Use “broadcast and wait” when you need to ensure the receiving sprite finishes before continuing
  • Combine methods - use broadcasts for events and variables for ongoing states
  • Organize your broadcasts - group related messages together

These methods will give you complete control over sprite interactions! 🎮

CA

CodeMaster_Alex

Replied 1 hour later

@SpriteProMaster This is incredibly helpful! 🎉

The broadcast method worked perfectly for my game. I especially love the two-way communication example - it’s exactly what I needed for my boss battle system.

Quick question: Is there a performance difference between using broadcasts vs variables for frequent updates?

PE

PerformanceExpert_Lisa

Replied 30 minutes later

@CodeMaster_Alex Great question about performance! Here’s the breakdown:

  • Variables: Better for frequent updates (like health, score, position)
  • Broadcasts: Better for one-time events (like level complete, enemy defeated)
    // For frequent updates - use variables
forever
set [player health v] to (health)
// Other sprites check this variable
end

// For events - use broadcasts
if <(health) < [1]> then
broadcast [player died v]
end
  

This hybrid approach gives you the best performance! 🚀

GT

GameTeacher_Mike

Replied 1 hour later

Love seeing students master sprite communication! 🎓 Here are some advanced patterns to explore:

  • State Machines: Use variables to track complex sprite states
  • Event Queues: Queue multiple broadcasts for complex sequences
  • Sprite Managers: Create a “controller” sprite that manages all others
  • Data Passing: Use list variables to pass complex data between sprites

These patterns will help you build professional-quality games! 🎮

VB

Vibelf_Community

Pinned Message • Moderator

🚀 Master Advanced Sprite Interactions!

Fantastic discussion on sprite communication! For those ready to tackle even more complex interactions, our community can help you implement:

  • 🎯 Complex multi-sprite coordination
  • 🔄 Advanced state management systems
  • 📊 Data-driven sprite behaviors
  • 🎮 Professional game architecture patterns

📚 Related Discussions

Ready to build sophisticated sprite systems? Get personalized guidance from our expert tutors in the Vibelf app!