Dragging multiple sprites
December 25, 1997
by Alex Zavatone
Here is some quick code to create a bunch of objects that drag as one. This code is to be called from a sprite's mouseDown script and does have a repeat loop which will suspend most other background events on the Mac but not on Windows.
All the sprites should be ordered in the score one after the other with the sample code being called from the first sprite's mouseDown. The list of sprites to drag is relative to the starting sprite number and is defined in the list called mySprites. Each of these sprites are puppeted on mouseDown and left that way on mouseUp. During fast dragging, there are some flickers as sprites reposition themselves. I can't find anywhere in the code that would cause this but it's rather minor. The line where mouseLoc is defined is an attempt to minimize this misbehavior.
Also, my standard disclaimer of "it could be written better" always applies but hey, it works, it's free, have fun! Oh, this should work in Director 4, 5 and 6.
-- Copyright 1998 by Zav - Alex Zavatone for Director-Online
-- use as you see fit and please give credit if used a project
on Drag
set mySprites = [0,1,2,3,4,5,6,7]
set oldLocations = [:]
set mySprite = the clickOn
set myLoc = point(the mouseH, the mouseV)
repeat with mySpriteNum in mySprites
set theSprite = mySprite + mySpriteNum
puppetSprite theSprite, 1
addProp oldLocations, theSprite, ¬
the loc of sprite theSprite - myLoc
end repeat
repeat while the mousedown
set mouseLoc = point( the mouseH, the mouseV)
repeat with mySpriteNum in mySprites
set theSprite = mySprite + mySpriteNum
set the loc of sprite theSprite = ¬
getProp(oldLocations,theSprite) + mouseLoc
end repeat
updatestage
end repeat
end
A demo movie (used to create the Shockwave movie) is available for download (SIT or ZIP).
Copyright 1997-2025, Director Online. Article content copyright by respective authors.