Download presentation
Presentation is loading. Please wait.
Published byDarrell Winchester Modified over 9 years ago
1
L ECTURE 10 Announcements
2
Final 1 Feedback Almost completely done with your 2D game engine! – Congratulations! – Feel free to use it/improve after the class is over (some of us have/still are) Time to start showing off your product – ~2.5 weeks of gameplay coding! – Content creation! – Tons of playtesting! More on public playtesting later…
3
QUESTIONS? Announcements
4
L ECTURE 10 Sound
5
SOUND APPLICATIONS Sound
6
Sound in Games In the real world, computers have sound Background music Sound effects Can be an important part of gameplay – Listening for footsteps – Dramatic music
7
Sound File Formats Many ways to encode and store sound Open standards – Ogg Vorbis – FLAC Closed standards – mp3 – m4a – wav
8
Sampled Audio mp3, wav, and most other familiar extensions Usually recordings of live sounds Samples of sound wave at regular intervals Prevalent in modern games Refers to data type, not origin – Touchtone telephone is generated but still sampled 1100100110101011011101011001000110101
9
Generated Audio MIDI File provides information on instruments and notes – Similar to sheet music Sound cards translate from instruments/notes to sound Can instruct computer to play something even if you can’t play it Used to be popular to save space, not as common now
10
Compressed vs. Uncompressed Compressed Sound Files Lossy or Lossless? – Lossy remove “least important” parts of sound wave – Lossless just use smart compression on raw wave Smaller file size (esp. lossy) Lossy is lower quality Slower to decode and play Often used for music Uncompressed Sound Files Record as much as possible of sound wave Much larger file size Usually high quality Faster to decode and play Often used for sound effects
11
Buffering Decompressing and decoding is slow Read sound into buffer, play back from buffer Size of buffer depends on speed of system Playback delay while buffer is filled Buffer Sound file Sound device Decoding
12
SOUND IMPLEMENTATION Sound
13
javax.sound.sampled AudioSystem : Provides factory methods for loading audio sources Clip : Any audio that can be loaded prior to playback Line : Any source of streaming audio DataLine : An implementation of Line with helpful media functionality (start, stop, drain, etc) Other classes for mixing, ports, and other utilities File file = new File(“mysound.wav”); InputStream in = new BufferedInputStream( new FileInputStream(myFile) ); AudioInputStream stream = AudioSystem.getAudioInputStream(in); Clip clip = AudioSystem.getClip(); clip.open(stream); clip.start();
14
javax.sound.midi MidiSystem : The AudioSystem for MIDI files Sequencer : Plays MIDI sounds Other classes for manipulation of instruments, notes, and soundbanks – So you can create MIDI sounds in realtime – Much harder to manipulate samples Sequence song = MidiSystem.getSequence(new File(“mysong.mid”)); Sequencer midiPlayer = MidiSystem.getSequencer(); midiPlayer.open(); midiPlayer.setSequence(song); midiPlayer.setLoopCount(0); midiPlayer.start();
15
Alternatives? Some drawbacks of the built-in sound classes… – Imprecise control over exact playback start/stop positions – Almost impossible to manipulate or even examine samples in realtime – While Java offers pan and reverb, other libraries offer more varied effects But it’s very effective for simple background music and sfx!
16
OpenAL Cross-platform audio API modeled after OpenGL Pros: – Built for positional sound (distance attenuation, Doppler shift, etc all built in) – More fine-grain control available Cons: – Single listener model – Modeled on OpenGL
17
Others Most other libraries are platform-specific or wrappers for OpenAL …except for synthesis libraries! – Jsyn, Beads, etc – Useful for composer programs and the like, not so much for sound playback
18
QUESTIONS? Sound
19
L ECTURE 10 Collision Detection III
20
Point of Collision We want to find out where shapes hit In our simulation, colliding shapes are intersecting – Generally the intersection is small – So we choose a point that approximately represents where the intersection is
21
Poly-Poly When two polygons (AABs are polygons too!) collide, at least one vertex of one shape is inside the other (almost always) – If there’s only one point, use that as the point of collision – If there’s more than one, average them!
22
Circle-Circle
23
Circle-Poly
24
QUESTIONS? Collision Detection III
25
L ECTURE 9 Physics III
26
ROTATION Physics III
27
Rotation We currently have shapes that don’t rotate First step is to be able to rotate shapes Next step is to provide collision response for rotating entities
28
Terminology θ ω
29
Basics Your physical entities should have an angle, angular velocity, and angular acceleration You should integrate these as before But whenever you do this you have to physically rotate the shape public class PhysicalEntity{ float angle, aVel, aAcc; void move(float time) { //integrate position aVel += aAcc*time; angle += aVel*time; aAcc = 0; rotate(aVel*time); } }
30
Rotating Shapes What shapes do we need to rotate? AAB doesn’t rotate, by definition Circles are circles – You still need angular values for the circle though, what if a hitbox is a circle? Therefore only polygons need to rotate Rotate polygons by rotating their vertices
31
Centroid of Polygon
32
Rotating Polygons θ
33
Inertia
34
QUESTIONS? Rotation
35
ROTATIONAL PHYSICS Physics III
36
Impulse and Forces How can we cause shapes to rotate in the world? Currently we are applying impulse/forces the centroids of entities Apply impulse/force to object, but not at centroid
37
Impulse and Forces
38
Angular Impulse and Forces
39
Collision Response We need to change the impulse we calculated in Physics II It’s now a different value that is applied at some specific point – It’s applied to the point of collision!
40
Some Definitions
41
Collision Response
42
Fixed Rotation
43
QUESTIONS? Rotational Physics
44
FRICTION Physics III
45
Friction
46
Frictional Force a b a b
47
Relative Velocity
48
How Much Force? From physics, the friction force on object A due to object B is proportional to the force exerted on object A by object B We don’t really have that force… – But we did apply impulse to the objects!
49
The Force
50
Disclaimer This friction works for the case when the relative velocity is linear With rotation, things become much more difficult If you want to combine these, good luck! ω
51
QUESTIONS? Friction
52
L ECTURE 10 Spatial Acceleration Structures
53
Collisions aren’t cheap
54
Can we do better? We can tell that some collisions don’t even need to be checked Spatial acceleration data structures reduce # of collisions by taking advantage of spatial locality – Use as a replacement for your Set/List – Can even implement Java Collection !
55
Bounding boxes Every shape has a bounding box – min/max x/y values of any point in the shape Function of the shape: – AAB – itself – Circle – center ± (r,r) – Poly – min/max over all vertices – Compound – min/max over all subshapes
56
Quadtrees Like a binary tree, but 4 children Divide world into quadrants – Recursively subdivide quadrants based on # of entities in a quadrant – Only try colliding with entities in your quadrant Demo: http://www.mikechambe rs.com/blog/2011/03/ 21/javascript-quadtree- implementation/ http://www.mikechambe rs.com/blog/2011/03/ 21/javascript-quadtree- implementation/
57
Quadtrees - insert Starting at the root node: – If this node isn’t split yet, add the entity here If adding the entity results in X entities, split and re-insert everything in the split quadrant – Else, find the quadrant that should bound the entity’s bounding box If one does, recur down that node If none do, add the entity to this node
58
Quadtrees - retrieve Gets all the entities for possible collisions Starting at the root node: with an accumulator – Add all entities in this node to accumulator – Again, determine which quadrant this entity should reside in If none, recur down all children – any entity could be valid! Else, recur down that child quadrant
59
Quadtrees – pros/cons Pros – Fairly easy to implement – Good at reducing # of collisions Cons – Only works with bounded worlds – Assumes objects are uniformly distributed
60
Can we do even better? What if objects are highly concentrated (non-uniformly distributed)? What if the world is unbounded? Where to mark quadrants?
61
KD-trees K-dimensional trees (in our case, k = 2) Traversing to children is subdividing by either x or y – At each subdivision, choose the optimal x or y value to subdivide by – Efficiently splits up entities into buckets
62
Choosing the split axis
65
KD-trees – add/retrieve Implementation details are the same as quadtrees, except for splitting/traversal – Splitting – each node is an x or y node, subdivide based on coordinate at mean/median/etc.. – Traversal – traverse based on x or y value – left is less than, right is greater than Subdivision may involve sorting – how to optimize # of sorts required?
66
KD-trees – pros/cons Pros – Takes entity distribution into account – Great at reducing # of collisions Cons – Trickier to implement – Slightly higher construction time
67
Using KD/quad trees On each tick: – Rebuild the tree (clear and then re-insert all entities) – Use retrieve(PhysicsEntity) to get entities to attempt collision with for each entity – Run standard collision detection algorithm – ??? – Profit!
68
QUESTIONS? Spatial Acceleration Structures
69
L ECTURE 10 Tips for Final 2
70
EFFECTIVE PLAYTESTING Tips for Final 2
71
Finding Playtesters CS students are easy targets, try the sun lab or MS lab – Ask nicely – Don’t ask busy people Keep your audience in mind, however – It probably isn’t all CS students
72
Don’t Interrupt! Be a fly on the wall – Say as little as possible – Don’t offer hints or instructions Your game should speak for itself – You won’t be there to offer instructions when your game is released
73
When to Interrupt Player is frustrated or taking too long in a single area You’re no longer getting good feedback If the player moves on, you will resume getting good feedback
74
Keep a Log What is the player getting stuck on? – Make it smoother What is the player enjoying? – Emphasize it What is the player ignoring? – Take it out if it’s unnecessary Consider having the game keep an automated log – Analytics is wonderful!
75
QUESTIONS? Tips for Final 2
76
JAVA TIP OF THE WEEK Tips for Final 2
77
Default Visibility You already know public, private, protected What happens when there’s no visibility modifier? Then the field/method is visible to anything in the same package
78
A Helpful Table Own ClassSame Package SubclassAll Others public Visible protected Visible No (default)Visible No private VisibleNo
79
Some General Visibility Tips Use private wherever possible – “Encapsulation” If you have a large amount of protected methods you want truly protected, consider separating them into an interface
80
QUESTIONS? Tips for Final 2
81
N O P LAYTESTING ? Playtest with random people this week!
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.