Skip to content

Wall collision detection for multiple connected sprites

💡 Having trouble with Scratch block assembly? Don’t know how to implement code logic? 🚀 Get Help Now

SG

ShopGameDev

Posted on January 23, 2024 • Beginner

🛒 Need help with wall collision for shopping game

Hi everyone! I’m working on a shopping game (and it’s definitely not the boring kind! 😄) where the player character moves around with a shopping trolley.

The problem I’m facing is with wall collision detection. The player and the trolley need to be separate sprites because I have plans for future features, but I can’t figure out how to make wall collision work properly when they’re moving together.

Has anyone dealt with collision detection for multiple connected sprites before? Any help would be really appreciated!

CM

CollisionMaster_Nina

Replied 2 hours later • ⭐ Best Answer

Great question @ShopGameDev! Multi-sprite collision can be tricky, but here’s a clean solution that will work perfectly for your shopping game:

🎯 Method 1: Master-Follower System

Make the player the “master” sprite that handles all collision detection, and the trolley follows:

Player Sprite Code:

    when flag clicked
forever
// Handle movement input
if <key [right arrow v] pressed?> then
change x by [5]
wall detection
end
if <key [left arrow v] pressed?> then
change x by [-5]
wall detection
end
if <key [up arrow v] pressed?> then
change y by [5]
wall detection
end
if <key [down arrow v] pressed?> then
change y by [-5]
wall detection
end

// Tell trolley where to go
broadcast [update trolley position v]
end

define wall detection
repeat until <not <touching [Wall v]?>>
if <(direction) = [90]> then
change x by [-1]
end
if <(direction) = [270]> then
change x by [1]
end
if <(direction) = [0]> then
change y by [-1]
end
if <(direction) = [180]> then
change y by [1]
end
end
  

Trolley Sprite Code:

    when I receive [update trolley position v]
// Follow player with offset
glide [0.1] secs to x: ((Player x position) + [-30]) y: (Player y position)
  

🔧 Method 2: Shared Collision Detection

For more complex scenarios, use a shared collision system:

    // Player Sprite
when flag clicked
forever
set [player x v] to (x position)
set [player y v] to (y position)

if <key [right arrow v] pressed?> then
set [move direction v] to [right]
set [move amount v] to [5]
broadcast [check collision v] and wait
if <(collision detected) = [false]> then
change x by [5]
broadcast [move trolley v]
end
end
end

// Collision Detection Sprite (invisible)
when I receive [check collision v]
go to x: ((player x) + (move amount)) y: (player y)
if <touching [Wall v]?> then
set [collision detected v] to [true]
else
set [collision detected v] to [false]
end
  

🚀 Method 3: Advanced Coordinated Movement

For the most realistic movement where both sprites check for collisions:

    // Player Sprite
when flag clicked
forever
if <key [right arrow v] pressed?> then
broadcast [try move right v] and wait
if <(can move) = [true]> then
change x by [5]
end
end
end

// Movement Coordinator (invisible sprite)
when I receive [try move right v]
set [can move v] to [true]

// Check if player can move
ask [Player v] to [go to x: ((Player x position) + [5]) y: (Player y position)]
if <[Player v] touching [Wall v]?> then
set [can move v] to [false]
end

// Check if trolley can move
ask [Trolley v] to [go to x: ((Trolley x position) + [5]) y: (Trolley y position)]
if <[Trolley v] touching [Wall v]?> then
set [can move v] to [false]
end

// Reset positions if can't move
if <(can move) = [false]> then
ask [Player v] to [go to x: (Player x position) y: (Player y position)]
ask [Trolley v] to [go to x: (Trolley x position) y: (Trolley y position)]
else
// Move trolley to follow
ask [Trolley v] to [change x by [5]]
end
  

I’d recommend starting with Method 1 - it’s simple and works great for most games! 🎮

SG

ShopGameDev

Replied 30 minutes later

@CollisionMaster_Nina This is perfect! Thank you so much! 🙌

I went with Method 1 and it works like a charm. The trolley follows the player smoothly and the collision detection is working perfectly. This will definitely help with my future features too!

GD

GameDev_Pro

Replied 1 hour later

Great solution @CollisionMaster_Nina! 👏 For anyone wanting to add more polish, here are some extra tips:

  • Smooth following: Use glide blocks for smoother trolley movement
  • Rotation: Make the trolley rotate to face the movement direction
  • Distance checking: Add a maximum distance check so the trolley doesn’t get too far behind
  • Animation: Add walking animations that sync between player and trolley

Shopping games can be really fun when the mechanics feel polished! 🛒✨

VB

Vibelf_Community

Pinned Message • Moderator

🚀 Master Multi-Sprite Game Development!

Fantastic discussion on sprite coordination! For those looking to create even more complex multi-sprite systems, our community can help you implement:

  • 🚗 Vehicle systems with multiple parts
  • 👥 Party-based RPG character coordination
  • 🏗️ Construction games with connected building pieces
  • 🎮 Advanced AI companions and followers

📚 Related Topics

Ready to build amazing multi-sprite games? Get personalized guidance from our expert tutors!