43
Arcade Games: Architecture, 2D Graphics, Collision Detection John Laird September 12, 2011

Lecture 2 Arcade Game Architecture

Embed Size (px)

Citation preview

Page 1: Lecture 2 Arcade Game Architecture

Arcade Games:Architecture, 2D Graphics,

Collision DetectionJohn Laird

September 12, 2011

Page 2: Lecture 2 Arcade Game Architecture

Arcade Games• Examples

• Missile Command, Space Invaders, Breakout, Centipede, Pac-Man, Frogger, Tempest, Joust, …

• Game Definition• 2D environment

• Move objects around screen in 2D• Major interaction is via collisions• (And avoiding collisions)

• Simple rules• Rules embedded in physics of game

• Simple goals• Hit things: get points• Avoid getting hit: stay alive

Page 3: Lecture 2 Arcade Game Architecture

Important Traits of Arcade Games:• Easy-to-learn – simple controls• Single-screen – or simple scrolling• Often Infinite Play• Multiple Lives• Scoring – Highest score• Little to no story

Page 4: Lecture 2 Arcade Game Architecture

Game Engine = World SimulationDiscrete simulation: each cycle computes a ``snapshot'' of the worldDifference between a technical simulation and a game:• Continual behavior

• Not just run a program and get an answer

• Real-time and highly interactive• Update at around 30 times/second • Necessary to avoid clunky action or missed player input • Rendered time always lags behind real time/game time by at least 1 frame• Consistency is important (to both)

• Simple physics: velocity, elastic collisions• Usually no mass, accelerations, momentum

Page 5: Lecture 2 Arcade Game Architecture

Game LoopInitialization Overall Game

Control

Exit

wait

Game Session Control

Player Input

Main Logic• Physics• Game AI• Collision Processing

Render sceneto buffer

Copy buffer to display

Time sync

1 cycle/frame

Page 6: Lecture 2 Arcade Game Architecture

Multi-player Game LoopInitialization Overall Game

Control

Exit

wait

Game Session Control

Render sceneto buffer

Copy buffer to display

Time sync

1 cycle/frame

Local Player Input

Main Logic• Consistency• Physics• Game AI• Collision Processing

Send input to remote players

Receive remote players’ input

Page 7: Lecture 2 Arcade Game Architecture

Simulation Types: Fixed Discrete• Fixed Discrete (tied to real time)

• Update world model each time step• Each time step is same size• Wait if done too early• Detect interactions by examination

• Pros:• Simpler physics• Smoother graphics

• Cons:• Computation must fit into time step• Time step limits max frame rate

Game events

User inputs

Page 8: Lecture 2 Arcade Game Architecture

Simulation Types: Variable Discrete• Variable Discrete

• Time steps are variable• dictated by amount of computation• fast as possible

• Pros:• No busy wait• Faster hardware gives smoother

interaction and higher frame rate

• Cons• Requires a little bit more work on

physics calculation• Jerky motion if frame rate too low

Game events

User inputs

Page 9: Lecture 2 Arcade Game Architecture

2D Graphics

• Points• x,y

• Lines• Two points• Draw all points in between• Low-level hardware support

4,4

-2,-1

Page 10: Lecture 2 Arcade Game Architecture

Coordinate System(0,0)

+y

+x

(120,120)

Page 11: Lecture 2 Arcade Game Architecture

Sprites:• Object that moves around, displayed as a bit map

• NxM pixels:12 x 12 = 144. 100 x 100 = 10,000.• Displayed on a background• Some aspects can be transparent

Page 12: Lecture 2 Arcade Game Architecture

Sprite Data

• Static• Size• Image sets• Weapons, shields, worth, ...

• Dynamic• Position• Velocity• Pose• Current image• Strength, health, ...• Saved background

Page 13: Lecture 2 Arcade Game Architecture

Creating Sprites

• Create Sprite in 2D or 3D drawing package• 2D

• Gimp• Photoshop• Paint

• 3D• 3D Studio Max• Maya• Blender 3D• Milkshape 3D

• Save as file

Page 14: Lecture 2 Arcade Game Architecture

Why Physics?• Some games don’t need any physics• Games based on the real world should look realistic,

meaning realistic action and reaction• More complex games need more physics:

• sliding through a turn in a racecar, sports games, flight simulation, etc.

• Running and jumping off the edge of a cliff

• Two types of physics:• Elastic, rigid-body physics, F = ma, e.g., pong• Non-elastic, physics with deformation: clothes, pony tails, a

whip, chain, hair, volcanoes, liquid, boomerang

• Elastic physics is easier to get right

Page 15: Lecture 2 Arcade Game Architecture

Game Physics• Approximate real-world physics• We don’t want just the equations• We want efficient ways to compute physical values• Assumptions:

• 2D physics, usually easy to generalize to 3D (add z)• Rigid bodies (no deformation)• Will just worry about center of mass

• Not accurate for all physical effects

Page 16: Lecture 2 Arcade Game Architecture

Position and Velocity• Modeling the movement of objects with velocity

• Where is an object at any time t?• Assume distance unit is in pixels

• Position at time t for an object moving at velocity v, from starting position x0:• x(t) = x0 + vx t• y(t) = y0 + vy t

• Incremental computation per frame, assuming constant time step and no acceleration:• vx and vy constants, pre-compute • x += vx• y += vy

vy

vx

(x0, y0)

v: velocity

Page 17: Lecture 2 Arcade Game Architecture

Acceleration• Acceleration (a): change in velocity per unit time

Acceleration

Velocity

Approximate

Page 18: Lecture 2 Arcade Game Architecture

Acceleration

• Constant acceleration: vx += ax, vy += ay

• Variable acceleration: • use table lookup based on other factors:• acceleration = acceleration_value(gear, speed, pedal_pressure)

• Cheat a bit: acceleration = acceleration_value(gear, speed) * pedal_pressure

• ax = cos (v) * acceleration• ay = sin (v) * acceleration

• Piece-wise linear approximation to continuous functions

Page 19: Lecture 2 Arcade Game Architecture

Gravity• Gravity is a force between two objects:

• Force F = G (m1m2)/ D2

• G = 6.67 x 10-11 Nm2kg-2

• mi: the mass of the two objects• D = distance between the two objects

• So both objects have same force applied to them• F=ma --> a=F/m

• On earth, • Assume mass of earth is so large it doesn’t move, • Assume D is constant because so far from center of earth• So get uniform acceleration• Position of falling object at time t:

• x(t) = x0• y(t) = y0 + 1/2 * 9.8 m/s2 * t2

• Incrementally, y += gravity (normalized to frame rate)

Page 20: Lecture 2 Arcade Game Architecture

Space Game Physics• Gravity

• Influences both bodies• Can have two bodies orbit each other• Only significant for large mass objects

• What happens after you apply a force to an object?• What happens when you shoot a missile from a moving

object?• Or a shell from a tank?

• What happens when two objects collide?• What types of controls do you expect to have on a

space ship?

Page 21: Lecture 2 Arcade Game Architecture

Mass• Objects represented by their center of mass, not

accurate for all physical effects• Center of mass (xc, yc) for a polygon with n vertices:

• Attach a mass to each vertex• xc = ximi/ mi, i = 0 .. n• yc = yimi/ mi, i = 0 .. n

• For sprites, put center of mass where pixels are densest

Page 22: Lecture 2 Arcade Game Architecture

Friction• Conversion of kinetic energy into heat• Frictional force Ffriction = m g

• m = mass, g = 9.8 m/s2, • = frictional coefficient = amount of force to maintain a constant speed

• Factual = Fpush - Ffriction• Careful that friction doesn’t cause your object to move backward!• Consider inclined plane

• Usually two frictional forces• Static friction when at rest (velocity = 0). No movement unless overcome.• Kinetic friction when moving (k < s)

mass(m)

m*g

Fpush Ffriction

Page 23: Lecture 2 Arcade Game Architecture

Race Game Physics• Non-linear acceleration• Resting friction > rolling friction• Rolling friction < sliding friction• Centripetal force?

• What controls do you expect to have for a racing game?• Turning requires forward motion!

• What about other types of racing games• Motor Boat?• Sailboat• Hovercraft?• Ice boat

Page 24: Lecture 2 Arcade Game Architecture

Projectile Motion• Forces

: angle of inclination

g: gravity

m: mass of projectile

W: windWr: wind resistance

vi = initial velocity

vix = vi cos()

viy = vi sin()

Reaches apex at t = vi sin()/g, hits ground at x = vix * viy/g

With wind:

x += vix + W

y += viy

With wind resistance and gravity:

vix += Wrx

viy += Wry + g, g normalized

Page 25: Lecture 2 Arcade Game Architecture

Collisions• Non-elastic

• Hit something with a bullet• Run over a prize

• Elastic - bounces• Basketball

Page 26: Lecture 2 Arcade Game Architecture

Collisions: Six Steps of Analysis

1. Detect that a collision has occurred2. Determine the time of the collision

• Often assume it is when collision is detected• But for more accurate – need to know so can back up to point of

collision

3. Determine where the objects were at time of collision4. Determine the collision angle off the collision normal5. Determine the velocity vectors after collision

• Invert velocity vector perpendicular to collision plane

6. Determine changes in rotation• Usually skip.

Page 27: Lecture 2 Arcade Game Architecture

Simple Collision Detection• Image Space:

• Pixel by pixel basis. Expensive.

• Object Space:• Hard for complex and concave spaces:

• Standard Approach:• Cheat!• Create a bounding box or circle

• test each vertex to see in another object• Hide this by making your objects boxy or round• Don’t have objects like:

Page 28: Lecture 2 Arcade Game Architecture

Circles and Fixed Barrier• Simplest case

• Good first step for your games• Assume circle hitting an immovable barrier

• Detect that a collision occurred• If the distance from the circle to the line < circle radius • Reformulate as a point about to hit a bigger wall• If vertical and horizontal walls, simple test of x, y

r

r

Page 29: Lecture 2 Arcade Game Architecture

Circles and Angled Lines• What if more complex background: pinball?

• For complex surfaces, pre-compute and fill an array with collision points (and surface normals)

Page 30: Lecture 2 Arcade Game Architecture

Circles and Circles• If the distance between two circles is less than the sum of

their radii• Trick: avoid square root in computing distance! • Instead of checking (r1+r2) > D, where D = sqrt((x1-x2)2 + (y1-y2)2)• Check (r1 + r2)2 > ((x1-x2)2 + (y1-y2)2)

• Unfortunately, this is still O(N2) comparisons, N number of objects

x1, y1

x2, y2

r2r1 D

Page 31: Lecture 2 Arcade Game Architecture

Rectangles and Rectangles• If vertex is with another rectangle

• Still O(N2) comparisons, N number of objects

x1, y1

x2, y2

x1 < xa < x2

xa, ya

y1 < ya < y2

Page 32: Lecture 2 Arcade Game Architecture

Avoiding Collision Detection• Observations: collisions are rare

• Most of the time, objects are not colliding

• Use filters to remove as many objects as possible from the comparison set

• Use expensive – but accurate method for only “close” objects

Page 33: Lecture 2 Arcade Game Architecture

Area of Interest• Avoid most of the calculations by using a grid:

• Size of cell = diameter of biggest object• Test objects in cells adjacent to object’s center

• Can be computed using mod’s of objects coordinates and map to array

• Closer to linear in number of objects

Page 34: Lecture 2 Arcade Game Architecture

Detect that a collision occurred• Alternative if many different sizes

• Cell size can be arbitrary • E.g., twice size of average object

• Test objects in cells touched by object• Must determine all the cells the object touches• Works for non-circles also

Page 35: Lecture 2 Arcade Game Architecture

Detect collision: Sorting1. Sort objects by one dimension (x)

• Compare x values of neighboring objects to see if possible overlap

2. Sort each set of overlappoiing objects from 1 by other dimension (y).• Find any with overlapping y values.

BCA

D

EF

B CA D EF

C

D

EF

C

D

EF

Page 36: Lecture 2 Arcade Game Architecture

Collisions: Six Steps of Analysis

1. Detect that a collision has occurred2. Determine the time of the collision

• So can back up to point of collision

3. Determine where the objects were at time of collision4. Determine the collision angle off the collision normal5. Determine the velocity vectors after collision6. Determine changes in rotation

Page 37: Lecture 2 Arcade Game Architecture

Circle on Wall Collision Response• Determine the time of collision (tc):

• tc = ti + (xh-x1)/(x2-x1)*t• ti = initial time• t = time increment

• Determine where the objects are when they touch• yc = y1- (y1-y2) * (tc-ti)/t

• Determine the collision angle against collision normal• Collision normal is the surface normal of the wall in this case• Compute angle of line using (x1-xh) and (y1-yc)

x1,y1

x2,y2

xh

collision normal

Page 38: Lecture 2 Arcade Game Architecture

Circle on Wall Collision Response• Determine the velocity vectors after collision

• Angle of reflectant = angle of incidence; reflect object at an angle equal and opposite off the surface normal

• If surface is co-linear with the x- or y-axes:• Vertical - change sign of x velocity• Horizontal - change sign of y velocity• Corner - change sign of both

• Compute new position• Use t - tc to calculate new position from collision point

• Determine changes in rotation• None!

• Is this worth it? Depends on speed of simulation, …

Page 39: Lecture 2 Arcade Game Architecture

Circle-circle Collision• Another important special case

• Good step for your games• Many techniques developed here can be

used for other object types

• Assume elastic collisions:• Conservation of momentum• Conservation of kinetic energy

• Non-elastic collision converts kinetic energy into heat and/or mechanical deformations

Page 40: Lecture 2 Arcade Game Architecture

Circle-circle Collision Response• Determine the time of the collision

• Interpolate based on old and new positions of objects

• Determine where objects are when they touch• Backup positions to point of collision

• Determine the collision normal• Bisects the centers of the two circles

through the colliding intersection

• Not always necessary for believable gameplay! collision “surface”

collision normal

Page 41: Lecture 2 Arcade Game Architecture

Circle-circle Collision Response• Determine the velocity: assume elastic, no

friction, head on collision• Conservation of Momentum (mass * velocity):

• m1v1 + m2v2 = m1v’1 + m2v’2

• Conservation of Energy (Kinetic Energy):• m1v1

2 + m2v22 = m1v’1

2 + m2v’22

• Final Velocities• v’1 = (2m2v2 + v1(m1-m2))/(m1+m2)• v’2 = (2m1v1 + v2(m1-m2))/(m1+m2)

• What if equal mass, m1 = m2• What if m2 is infinite mass?

Page 42: Lecture 2 Arcade Game Architecture

Circle-circle Collision ResponseFor non-head on collision, but still no friction:• Velocity change:

• Maintain conservation of momentum• Change of velocity reflect against the collision normal

collision “surface”

Page 43: Lecture 2 Arcade Game Architecture

Must be careful• Round-off error in floating point arithmetic can throw off

computation• Careful with divides

• Especially with objects of very different masses