Jump to content

  • Log In with Google      Sign In   
  • Create Account


rijvgt

Member Since 29 Aug 2013
Offline Last Active Sep 20 2013 03:20 PM
-----

#5090242 setting the displacement between snake segments

Posted by rijvgt on 29 August 2013 - 05:00 PM

Could you explain how exactly the body of the snake gets distorted?

 

In case the snake is constantly moving, in each loop the only node that gets updated properly is the nodes[1] the rest will get older values(each loop will update nodes[i] with nodes[i-1]'s previous value instead of nodes[i-1]) because you loop from the bottom of the snake instead of it's head. (If your snake would stopped moving, after nodes.size() amount of frames the snake would get back together)

No, that's the way it is supposed to be happy.png but you're wasting the first node.size()-1 repeats of the loop/frame

 

In your code you have setted c.vy = 0; so when you use circles[0].yPosition-=circles[0].vy*(2*5); it doesnt really do anything cause this is always circles[0].yPosition-=0. 

 

So you are currently only moving horrizontally.

 

 

Moreover, the following loop wouldn't work with the way you update the circles[0]'s position: (The circles wouldnt stay chainned)

 

for ( var i:int =4; i>0; i--)

{

                circles[i].xPosition = circles[i-1].xPosition;

                circles[i].yPosition = circles[i-1].yPosition;

}

 

// update circles[0] position

 

 

To fix the current way you handle the snake's head movement, try doing something like this: (Haven't tested it and it IS missing cases)

 

//update circles[0] position anyhow.

circles[0].xPosition-=circles[0].vx*(2*5);
circles[0].yPosition-=circles[0].vy*(2*5);

 

// Submit the changed position properly to the rest of the circles.

for (int i=1; i<5; i++)

{

if (circles[i].yPosition != circles[i-1].yPosition)

{

if (circles[i].xPosition != circles[i-1].xPosition)

circles[i].xPosition = circles[i-1].xPosition;

 

circles[i].yPosition-=( circles[i].vy*(2*5) - (the diameter of the circle)*i);

}

else {

circles[i].xPosition-=circles[i].vx*(2*5); //apply the same you used on circles[0]

}

 

}

 

 

Incase I'm wrong and that doesnt work dry.png, I would maybe advise you to control your FPS value(ie. lower it to like 1-5 in some cases), I think it would be easier to spot these kind of problems.




PARTNERS