grossd's Forum Posts

    hmm, i tried that but it didnt work .. perhaps it was overwritten in the code

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads

    Is there a way to make orbit work counter clockwise?

    Tagged:

  • Noticed this pixar video on linear interpolation:

    khanacademy.org/computing/pixar/animate/ball/v/a2-quick

    Looks like what i am missing here is the (formal) math of animation ...

    I can now see how great this math has been packaged into sprite behaviors -- making the accessible with limited such math knowledge ...

    Dan

    Well the bulk of it is a vector projection, so reading a tutorial on vector math may be useful.

    This equation sets t to a normalized vector projection of p onto the line between the two centers.

    t = clamp(((p.x-c0.x)*(c1.x-c0.x)+(p.y-c0.y)*(c1.y-c0.y))/((c1.x-c0.x)^2+(c1.y-c0.y)^2),0,1)

    Combined with:

    targetx = lerp(c0.X,c1.X,t)

    targety = lerp(c0.y,c1.y,t)

    you end up with the point closest to object p on the line segment between c0 and c1.

    If you could do vector math directly in construct it could look like this:

    A = p-c0 // vector from c0 to p
    B = c1-c0 // vector from c0 to c1
    t = (A dot B)/length(B)^2 // normalized vector probjection
    t = clamp(t, 0, 1) // limit to the line segment
    closetPoint = c0 + B*t // get point by lerping between c0 and c1 by t

    So anyways, you get a point between c0 and c1 close to p.

    Next it moves p toward that point so it's exactly a 'radius' away.

    Then it turns p left 90 degrees and moves forward at "speed" pixels per second.

    Honestly it's just a bunch of simple things put together. I usually draw a picture as i go coming up with these things. Then i simplify the math as much as possible.

    You could google things like "vector projection" and "point closest to a line segment" to find more info about the math.

    The construct specific stuff:

    clamp(value, low, high) limits a value to be between a low and high value

    lerp(a, b, t) moves a percentage from a to b by t. Where t is between 0 and 1.

  • Honestly it's just a bunch of simple things put together. I usually draw a >picture as i go coming up with these things. Then i simplify the math as much >as possible

    Simple for you :-)

    I feel like i am only getting to see the projected vector, and not the original one, and why projecting a vector is in fact a solution for identifying the path over time.

    Also the 90 degree turn that happens every tick is completely opaque to me -- there is no turning happening visually -- and interesting, when i set it to -90 the movement is reversed! -- holy cow -- how did that happen :-)

    I also like to work things out by drawing the out geometrically in powerpoint -- but, my trig. is rusty, and now, apparently, i need to get into vec again -- which is even more rusty :-)

    Dan

  • Hi,

    This is great.

    I am looking to analyze how exactly it works -- and why, when orbit is enabled, it doesn't arbitrarily displace the sprite, but keeps it going on the right path / (tangential) turn around the edge.

    How would you extend this solution to have a road coming into the track, where, for the first time, the sprite travels down the road to the track, does a first full "hello" round, and then continues on around the track,as its now.

    I am curious if orbit can be configured for such an initial behavior as well, in particular, when the incoming road could have any kind of angle.

    Can this be done?

  • Your "interpolation" solution is incredible -- i am looking at it, and it works, and i can't make sense out of it, including when reading the manual.

    Is there some math sites you can reference where i can read up on the underlying math ...

    Also, how does this work to create the straight move behavior and then the curved one as well.

  • Thanks.

    I will review your suggestion carefully.

    The easiest would be if Scirra adds one feature into orbit -- to indicate at what location on the circumference the orbiting sprite starts its orbit.

    I asked if they are willing to add this feature -- hopefully, they will say yes.

  • Thank you for the suggestion.

    I think this is a great work-around, and i will try it.

    However, once aspect of the problem i didn't mention is that the radius and hence path is dependent on the type of vehicle and it can be arbitrarily set by the player.

    So, the actual radius is not predefined -- the only thing that is predefined is the location of the center -- however, also these could be changed by the user in the future -- i.e. user configured track.

    So, i could still generate those guide instances -- but, best if i could do the real thing -- get orbit to work via any entry point, center and radius

  • Hello,

    Consider a race track that has two parallel lanes and then a semi circle on each side.

    Something like this: gettingoutofthegate.com/wp-content/uploads/2013/04/Saratoga-Main-Track.jpg, but for vehicles.

    now consider an object at the far end of a parallel lane, and a vehicle driving to that object.

    Once the vehicle arrives at the object, it should travel around the half circle, say, to an object located at the end of the half circle, to then continue on the other parallel path in the opposite direction.

    It appears that the orbit behavior doesn't work for this because once activated it repositions the vehicle, arbitrarily, to a new position on the circle (South-East) while, i need to continue moving the vehicle smoothly into the half circle.

    Is there a way to solve it.

    thanks,

    Dan

    p.s. i programmed my own circle routine, but its very cumbersome to use -- for example, it repositions the x/y of the vehicle at every tick -- if i want to adjust the speed, then i have to work with second rations per tick, and "calibrate" these to fit with speed settings typically elsewhere.

    If there is a predefined solution that would be great.

    around the center of the half circle

    Tagged:

  • Looks like i figured it out ...

    the "look ahead" only didn't work, but a negated condition did work -- i.e. when it does overlap and the joystick is still right -- move 5 units to the left to get out of the overlap.

    this worked,

  • Hello,

    I am using a controller to move a sprite (vehicle) around. I want to create in the middle of the screen a rectangle that the sprite can not penetrate when the rectangle is visible.

    Currently, i use tilebackground to create a rectangle, and a button on the control makes toggles it visibility.

    To move the sprite i use the joystick on the control -- e.g. if its pressed right i increase the sprites X location by 5, and similarly in the other directions( right decrease by 5, up -- decreate Y by 5, down increase y by 5).

    This works great to move the sprite around.

    To test whether whether i can move over the rectangle i test for overlap between the sprite the the tilebackground.

    However, here i run into a problem -- once the sprite overlaps with the rectangle its essentially jumped into it (due to the increase of 5) -- and then can not move out of it anymore.

    What i intended was that it can not get into there in the first place -- the incremenets (or decrements) are stopped.

    Is there a better way to move a sprite via a joystick or to test for overlap so that the overlap never happens.

    (I am now thinking that i need to test the X+/-5 Y+/- 5 coordinate before moving that many units -- and thereby ensure that an overlap never happens.)

  • Your code is really great. I am learning a lot, including the use of hierarchy, the ability to pick spatially close or far, the use of timer, etc.

  • Thank you.

    I will look at your example -- this is, btw, what i sort of tried to do, but ran into a bug i couldnt figure out.

  • Thank you.

    Getting to the previous one is somewhat non-trivial, since its a "floating" instance that has to be detected through some pick expression.

    Also, initially, there no other one, so this condition has to be checked as well.

    It looks like I need to keep a (tight) record of a mapping:

    - each vehicle can have zero to n text pop-up associated -- created in some sequence.

    - each pop-up is dynamically destroyed after x seconds

    I, btw, tried to keep a record how many pop ups were created as an instance variable in vehicle -- but ended up with a bug to keep this instance synchronized with the actual number of pop ups ---

    i still don't know what the bug is -- its not obvious --

  • Hello,

    I am implementing a pop up label for a sprite -- e.g. to visually indicate that it received an event.

    A text label is displayed for 3 seconds, 20 pixels below it.

    Trouble right now is how to position another label beside the sprite without obscuring first labels already showing -- i.e. each additional label shown needs to be displaced another 20 pixels below.

    One idea was to detect if there is a collision between labels and if so, move the last one further below. However, text labels don't have collision detection -- can it be added?