Kevin Fishburne ha scritto: > On 03/14/2011 04:46 AM, Doriano Blengino wrote: > >> I think that you have too many variables involved... to define a speed >> in a plane you need only two coordinates - you should choose between two >> methods (or coordinate systems). >> >> >> I think that you could choose by looking at what your joystick means to >> you. Does it rotate the object, like the famous game Asteroids? Then >> choose polar coordinates. Or does it mean left/right and up/down? Then >> choose cartesian coordinates (but you talked about speed and direction...). >> > > It actually does both, which is probably why it isn't working yet. I'm > using a Playstation-style gamepad with two analog sticks for player > control. The right stick's horizontal axis controls the player's > orientation/direction and the left stick controls the player's > movement/translation. Here's the breakdown of the two sticks: > > Right stick, left = Player turns counter-clockwise > Right stick, right = Player turns clockwise > Left stick, up = Player walks forward > Left stick, down = Player walks backward > Left stick, left = Player strafes left > Left stick, right = Player strafes right > > It's very similar to the controls used in most first person shooters. > Pushing the right stick modifies an orientation variable, so you can > turn faster or slower depending on how far you push the stick. How far > you push the left stick determines the speed with which you move. > Combining the two sticks should allow things like circle-strafing. > By adding a fixed value to the orientation of the player, at every frame, it will run in circle (speed<>0), or it will rotate on-place (speed=0). The radius of the circle will be proportional to speed/rotational_step... > Based on what you said I'm guessing I should be using the second method, > or is there something deeper I need to know? > I think there is nothing more to add... it depends on the real movements of the player. When it strafes (never heard this term before - had to consult a dictionary :-)) does it actually change its path? Perhaps no, so the right joystick implements the movements of the player with polar notation, while the left one creates missiles which, in turn, are moving objects with a given speed and angle (polar again).
Polar and cartesian speeds could be combined too, anyway: in a single frame you can add "polarspeed*cos(polarangle)" to Xpos, "polarspeed*sin(polarangle)" to Ypos, then add "horizspeed" to Xpos and "vertispeed" to Ypos. The result is again a vector with an angle, but you can play with four variables... but I don't think this would lead to an easy playable game (but you could use this to simulate the back-kick of a heavy gun. Suppose the player is moving at 45° with speed 10; then it fires at 135°. You could calculate back_kick_speedX=-cos(fired_angle) and back_kick_speedY=-sin(fired_angle); then at every frame you move the player in the usual manner, then add the components back_kick*, then reduce the back_kick* components to 50% of before. This should simulate a back-bump which quickly ceases :-)) ). This is not to insist on Asteroids game, but it was actually behaving like this: the movement was really in the x/y plane, with decreasing speeds, and when the fuel was burned those x/y components were adjusted by sin and cos of the ship orientation. In fact, it was hard to play... :-) Cheers, Doriano ------------------------------------------------------------------------------ Colocation vs. Managed Hosting A question and answer guide to determining the best fit for your organization - today and in the future. http://p.sf.net/sfu/internap-sfd2d _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user