Aller au contenu

Creating snake-like following systems with clones in Scratch

Ce contenu n’est pas encore disponible dans votre langue.

💡 Struggling with clone management and complex following systems? Need help with advanced game mechanics? 🚀 Get Help Now

SG

SnakeGameDev

Posted on July 17, 2025 • Advanced

🐍 Clone following system for snake/centipede game

Hey everyone! I’m working on a snake/centipede-style game and I’m running into a tricky problem. I need to create a system where:

  • Each segment follows the one in front of it
  • All segments are clones (for performance and simplicity)
  • The segments create a smooth, natural following motion
  • The system can handle variable numbers of segments

The challenge is that clones can’t directly reference each other by name. I’ve tried a few approaches but can’t get the smooth following behavior I want. Any advanced techniques would be greatly appreciated! 🙏

CM

CloneMaster_Pro

Replied 2 hours later • ⭐ Best Answer

Excellent question @SnakeGameDev! Clone-based following systems are definitely advanced territory. Here are two proven approaches:

🎯 Snake Following System Architecture

Here’s how the position tracking system works:

flowchart TD A[🐍 Head Segment] --> B[Store Position in Lists] B --> C[X Positions List] B --> D[Y Positions List] C --> E[Clone ID: 2] D --> E E --> F[Read Position from Lists] F --> G[Move to Previous Position] G --> H[Clone ID: 3] H --> I[Read Position from Lists] I --> J[Move to Previous Position] J --> K[Continue for All Segments] style A fill:#e1f5fe style B fill:#f3e5f5 style E fill:#e8f5e8 style H fill:#fff3e0 style K fill:#fce4ec

🔧 Method 1: Position List Tracking System

This is the most robust approach using lists to store positions:

    // Initialize lists (run once)
when flag clicked
delete all of [X Positions v]
delete all of [Y Positions v]
set [Segment Count v] to [0]
set [Head X v] to [0]
set [Head Y v] to [0]
  

🐍 Head Segment Code

The head segment controls movement and stores positions:

    when flag clicked
set [My ID v] to [1]
forever
// Movement controls
if <key [up arrow v] pressed?> then
change y by [10]
end
if <key [down arrow v] pressed?> then
change y by [-10]
end
if <key [left arrow v] pressed?> then
change x by [-10]
end
if <key [right arrow v] pressed?> then
change x by [10]
end

// Store current position
set [Head X v] to (x position)
set [Head Y v] to (y position)

// Add position to history
add (x position) to [X Positions v]
add (y position) to [Y Positions v]

// Limit history length (keep only what we need)
if <(length of [X Positions v]) > ((Segment Count) * [3])> then
delete [1] of [X Positions v]
delete [1] of [Y Positions v]
end

wait [0.1] seconds
end
  

🔗 Body Segment Clone Code

Each clone follows using stored positions:

    when I start as a clone
set [My ID v] to ((Segment Count) + [1])
change [Segment Count v] by [1]
set [Follow Delay v] to ((My ID) * [3])

forever
// Calculate which position to follow
set [Target Index v] to ((length of [X Positions v]) - (Follow Delay))

// Make sure we have enough position history
if <(Target Index) > [0]> then
go to x: (item (Target Index) of [X Positions v]) y: (item (Target Index) of [Y Positions v])
end

wait [0.1] seconds
end
  

🎮 Method 2: Trail Effect System

Alternative approach using temporary clones (simpler but different effect):

    // Head segment creates trail
when flag clicked
forever
if <key [space v] pressed?> then
move [5] steps
create clone of [myself v]
end
end

// Trail segments
when I start as a clone
set [ghost v] effect to [50]
repeat [20]
change [ghost v] effect by [5]
wait [0.1] seconds
end
delete this clone
  

🚀 Method 3: Advanced Smooth Following

For ultra-smooth movement with interpolation:

    when I start as a clone
set [My ID v] to ((Segment Count) + [1])
change [Segment Count v] by [1]
set [Smooth Factor v] to [0.3]

forever
// Calculate target position
set [Target Index v] to ((length of [X Positions v]) - ((My ID) * [2]))

if <(Target Index) > [0]> then
set [Target X v] to (item (Target Index) of [X Positions v])
set [Target Y v] to (item (Target Index) of [Y Positions v])

// Smooth interpolation
change x by (((Target X) - (x position)) * (Smooth Factor))
change y by (((Target Y) - (y position)) * (Smooth Factor))
end

wait [0.05] seconds
end
  

🎯 Segment Creation System

Dynamic segment addition when collecting items:

    // When collecting food/power-ups
when I receive [Add Segment v]
create clone of [Body Segment v]
play sound [grow v]

// Collision detection for food
when flag clicked
forever
if <touching [Food v]?> then
broadcast [Add Segment v]
change [score v] by [10]
end
end
  

This system creates natural, smooth following behavior that scales with any number of segments! 🐍

SG

SnakeGameDev

Replied 1 hour later

@CloneMaster_Pro This is incredible! 🎉 The position list method is exactly what I needed!

Quick question: How do I handle collision detection with the body segments? I want the game to end if the head touches any body segment.

GC

GameCollisionExpert

Replied 45 minutes later

@SnakeGameDev Great question! Here’s how to handle self-collision detection:

    // In head segment
when flag clicked
forever
// Check collision with body segments
if <touching [Body Segment v]?> then
broadcast [Game Over v]
stop [all v]
end

// Alternative: Distance-based collision
repeat (Segment Count)
set [Check Index v] to ((length of [X Positions v]) - ((item (Check Index) of [Segment IDs v]) * [2]))
if <(Check Index) > [0]> then
set [Segment X v] to (item (Check Index) of [X Positions v])
set [Segment Y v] to (item (Check Index) of [Y Positions v])

if <((distance to x: (Segment X) y: (Segment Y)) < [15]) and ((My ID) ≠ [1])> then
broadcast [Game Over v]
end
end
end
end
  

This prevents the head from touching any body segment while allowing normal movement! 💥

VB

Vibelf_Community

Pinned Message • Moderator

🐍 Master Advanced Clone Systems!

Fantastic discussion on clone-based following mechanics! For developers looking to create even more sophisticated clone systems, our community can help you implement:

  • 🎯 Multi-layered clone hierarchies
  • ⚡ Performance-optimized clone management
  • 🎮 Complex AI behaviors with clones
  • 🔄 Dynamic clone spawning systems

📚 Related Topics

Ready to master advanced clone programming? Get expert guidance from our clone specialists in the Vibelf app!