Want character to follow the mouse cursor.... (solved)

Started by Puppetsj, Mon 03/11/2008 07:25:01

Previous topic - Next topic

Puppetsj

See subject. I put the code on Interact as I want it to be kind of like dragging the character around.

The code:
Code: ags
{
cBall.TurnBeforeWalking = false;
while (Mouse.IsButtonDown(eMouseLeft)) {
  if (cBall.y <= 115) {
		cBall.StopMoving();
  }
  else if (cBall.y >= 125) {
		cBall.StopMoving();
  }
  else {
		cBall.Walk(160,  mouse.y, eAnywhere);
  }
}
}


Of course the game crashes:

QuoteError: run_text_script1: error -6 running function 'cBall_Interact':
Error: Script appears to be hung (150001 while loop iterations without an update) in "GlobalScript.asc", line 426

Also the mouse cursor won't move when the key is pressed, and the character doesn't move until after I let go of the

monkey0506

Instead of putting the script in the interaction function, try repeatedly_execute_always:

Code: ags
// rep_ex_always
  if (mouse.IsButtonDown(eMouseLeft)) {
    if ((cBall.y <= 115) || (cBall.y >= 125)) cBall.StopMoving();
    else cBall.Walk(160, mouse.y, eAnywhere);
  }


Just leave the cBall.TurnBeforeWalking line in the interaction function.

Puppetsj

It works now, kind of. Still doesn't move until after I release the mouse button, and then only to the spot where I let go.
Maybe what I'm trying is impossible, but I doubt it after seeing all of the things people have managed to squeeze out of this engine. Most likely just a tad bit more complex than I feel it should be.

monkey0506

Wow...I'm sorry I was kind of distracted. You're telling the Character to walk every single game loop. Try adding a check that the character is not already moving:

Code: ags
// rep_ex_always
  if (mouse.IsButtonDown(eMouseLeft)) {
    if ((cBall.y <= 115) || (cBall.y >= 125)) cBall.StopMoving();
    else if (!cBall.Moving) cBall.Walk(160, mouse.y, eAnywhere);
  }


Edit: I should really think about what I'm doing here....

SMF spam blocked by CleanTalk