Mugen87 / yuka

JavaScript library for developing Game AI.
https://mugen87.github.io/yuka/
MIT License
1.1k stars 90 forks source link

how to judge arriveBehave over #52

Closed loveacat closed 2 years ago

loveacat commented 2 years ago

sorry for my pool english . i was wrtting a program to show a vehicle movement. i want a vehicle move to my target , so i use arriveBehave class. everytime the vehicle arrive the target ,the program will generate next target position. my problem is i don't know how to judge a arriveBehave is over , i try to use arriveBehaveObj.active to judge , but failed,and the vehicle move past the target and then return

Mugen87 commented 2 years ago

The active flag is not something that is set by the engine. You as a developer can use it to indicate whether a steering behavior should be active or not.

Determining if a game entity has arrived at a specific position is use case specific. You normally do not perform an equality test with a target position since steering behaviors are too imprecise for this. Instead, it's best to check if the game entity is close enough. In Kickoff I have used the following routine:

/**
 * Returns true if this player is at the position of its current steering target.
 *
 * @return {Boolean} Whether this player is at the position of its current steering target or not.
 */
atTarget() {

   return this.position.squaredDistanceTo( this.steeringTarget ) < CONFIG.PLAYER_IN_TARGET_RANGE_SQ;

}

Source: https://github.com/Mugen87/kickoff/blob/2404fee41ad8f3a26004d0f6fd0c39cab02e6b97/src/entities/Player.js#L201-L210

This actually represents the way humans or animals seek to a destination point. It's not necessary to exactly reach the target coordinate. Close enough is fine.