Det er en ok link, men den laver en cirkel omkring et centrum. Jeg kan også godt lave ovale cirkler, men stadig omkring et centrum som ikke er udgangspunktet.
Jeg har brug for formel, hvor jeg kan kaste hammeren ud, samtidig med den scalere ned, og vender tilbage, samtidig med den scalere op, til sit udgangspunkt. Ligesom en boomerang.
on beginsprite me -- sprite(1) is graphic of constraint circle pRadius = sprite(1).width / 2 - sprite(spriteNum).width / 2 pCentre = sprite(1).loc pOldLoc = sprite(spriteNum).loc pAngle = random(360) pSpeed = 8 -- pixels /frame pCollisionLastFrame = 0 end
on prepareframe me if pCollisionLastFrame = true then -- give it one frame at this heading to get back inside circle pCollisionLastFrame = false exit end if newloc = GetNewLoc(me) newloc = CheckForCollision(me, newloc) sprite(spriteNum).loc = newloc pOldLoc = newloc end
on GetNewLoc me -- calculate next loc based on angle, and distance travelled(pSpeed) -- hypoteneuse = pSpeed -- horiz side length = x, vertical side = y -- newloc = point(x,y) x = pSpeed * cos(degtorad(me, pAngle)) y = -pSpeed * sin(degtorad(me, pAngle)) pVector = point(x,y) newloc = pOldLoc + pVector return newloc end
on CheckForCollision me, newloc -- use pythagoras to check distance from centre x = newloc[1] - pCentre[1] y = newloc[2] - pCentre[2] xx = x * x yy = y * y rr = pRadius*pRadius tot = xx + yy if tot >= rr - (pSpeed * 2) then -- pSpeed * 2 for safety factor newloc = Bounce(me, newloc) end if return newloc end
on Bounce me, newloc -- "if the point it hits the circle is at angle a clockwise, and the -- object is currently travelling at an angle b clockwise, then after the -- collision it'll be travelling at an angle of 180- 2a + b (in degrees.)" x = newloc[1] - pCentre[1] y = newloc[2] - pCentre[2] hitAngle = atan(y/x) hitAngle = radToDeg(hitAngle) -- had to mess with this a bit... ended up with 180 - a + 2b pAngle = (180 - hitangle + (2*pAngle)) mod 360 newloc = GetNewLoc(me) -- tried this but get stuck in infinite recursiuon... -- CheckForCollision(me, newloc) pCollisionLastFrame = true return newloc end
on radToDeg me, radAngle return radAngle*180.0/pi() end
on degToRad me, degAngle return degAngle*pi()/180.0 end
Nu er jeg ikke lige nogen haj til det her lingo. ER det ikke muligt med et mere simplet forslag?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.