DM842 Computer Game Programming: AI Lecture 1
AI for Games Movement Behaviors
Marco Chiarandini
Department of Mathematics & Computer Science University of Southern Denmark
AI for Games Movement Behaviors Marco Chiarandini Department of - - PowerPoint PPT Presentation
DM842 Computer Game Programming: AI Lecture 1 AI for Games Movement Behaviors Marco Chiarandini Department of Mathematics & Computer Science University of Southern Denmark Practicalities Introduction Representations Outline Kinematic
Department of Mathematics & Computer Science University of Southern Denmark
Practicalities Introduction Representations Kinematic Movement
2
Practicalities Introduction Representations Kinematic Movement
3
Practicalities Introduction Representations Kinematic Movement
4
Practicalities Introduction Representations Kinematic Movement
5
Practicalities Introduction Representations Kinematic Movement
6
Practicalities Introduction Representations Kinematic Movement
7
Practicalities Introduction Representations Kinematic Movement
8
Practicalities Introduction Representations Kinematic Movement
9
Practicalities Introduction Representations Kinematic Movement
10
Practicalities Introduction Representations Kinematic Movement
11
Practicalities Introduction Representations Kinematic Movement
12
Practicalities Introduction Representations Kinematic Movement
13
Practicalities Introduction Representations Kinematic Movement
15
Practicalities Introduction Representations Kinematic Movement
16
Practicalities Introduction Representations Kinematic Movement
17
Practicalities Introduction Representations Kinematic Movement
18
Practicalities Introduction Representations Kinematic Movement
19
Practicalities Introduction Representations Kinematic Movement
20
Practicalities Introduction Representations Kinematic Movement
21
Practicalities Introduction Representations Kinematic Movement
22
Practicalities Introduction Representations Kinematic Movement
23
Practicalities Introduction Representations Kinematic Movement
struct Static: position # a 2D vector
24
Practicalities Introduction Representations Kinematic Movement
2D
25
Practicalities Introduction Representations Kinematic Movement
Practicalities Introduction Representations Kinematic Movement
2D
struct Kinematic: position # 2 or 3D vector
velocity # 2 or 3D vector rotation # single floating point value
Kinematic:
struct SteeringOutput: linear # 2D or 3D vector angular # single floating point value
27
Practicalities Introduction Representations Kinematic Movement
28
Practicalities Introduction Representations Kinematic Movement
2 at2 + r0
2θ′′t2 + θ0
struct Kinematic: position
velocity rotation def update(steering, time): position += velocity ∗ time + 0.5 ∗ steering.linear ∗ time ∗ time
steering.angular ∗ time ∗ time velocity += steering.linear ∗ time rotation += steering.angular ∗ time
struct Kinematic: position
velocity rotation def update(steering, time): position += velocity ∗ time
velocity += steering.linear ∗ time rotation += steering.angular ∗ time
29
Practicalities Introduction Representations Kinematic Movement
30
Practicalities Introduction Representations Kinematic Movement
31
Practicalities Introduction Representations Kinematic Movement
def getNewOrientation(currentOrientation, velocity): if velocity.length() > 0: return atan2(−velocity.x, velocity.z) else: return currentOrientation
32
Practicalities Introduction Representations Kinematic Movement
struct Static: position
struct KinematicSteeringOutput: velocity rotation
class KinematicSeek: character # static data char. target # static data target maxSpeed def getSteering(): steering = new KinematicSteeringOutput() steering.velocity = target.position − character.position # direction steering.velocity.normalize() steering.velocity ∗= maxSpeed character.orientation = getNewOrientation(character.orientation, steering.velocity) steering.rotation = 0 return steering
34
Practicalities Introduction Representations Kinematic Movement
getNewOrientation can be taken out
steering.velocity = character.position − target.position
35
Practicalities Introduction Representations Kinematic Movement
class KinematicArrive: character # static data target # static data maxSpeed radius # satisfaction radius timeToTarget = 0.25 # time to target constant def getSteering(): steering = new KinematicSteeringOutput() steering.velocity = target.position − character.position # direction if steering.velocity.length() < radius: return None steering.velocity /= timeToTarget # set velocity wrt time to target if steering.velocity.length() > maxSpeed: steering.velocity.normalize() steering.velocity ∗= maxSpeed character.orientation = getNewOrientation(character.orientation, steering.velocity) steering.rotation = 0 return steering
36
Practicalities Introduction Representations Kinematic Movement
class KinematicWander: character maxSpeed maxRotation # speed def getSteering(): steering = new KinematicSteeringOutput() steering.velocity = maxSpeed ∗ character.orientation.asVector() steering.rotation = (random(0,1)−random(0,1)) ∗ maxRotation return steering
38
Practicalities Introduction Representations Kinematic Movement
39