1 / 42

Lecture 5

Lecture 5. Announcements. Tou II Feedback. handins look varied and fun! write a Range or Interval class makes math code easier to write read modify makes M I easier to build on top of Tou. Limbo playthrough. Saturday 8pm, CIT 506 hosted by BGD. Zynga Guest Lecture. October 24th.

ryo
Download Presentation

Lecture 5

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture 5 Announcements

  2. Tou II Feedback • handins look varied and fun! • write a Range or Interval class • makes math code easier to • write • read • modify • makes M I easier to build on top of Tou

  3. Limbo playthrough Saturday 8pm, CIT 506 hosted by BGD

  4. Zynga Guest Lecture October 24th

  5. Announcements Questions?

  6. Lecture 5 Physics I

  7. Physics I Integration

  8. Velocity • rate at which position changes • just incrementpos? • pos = pos + vel • works fine with constant frame rate… • but frame rates vary • so always use time • pos = pos +vel*time

  9. Acceleration • the rate at which velocity changes • useful for gravity, springs, wind… • vel = vel + acc*time

  10. Which order to update? Position first (Euler) Velocity first (“Symplectic Euler”) vel = vel + acc*time pos = pos + vel*time • pos = pos + vel*time • vel = vel + acc*time

  11. Which order to update? Position first (Euler) Velocity first (“Symplectic Euler”) vel = vel + acc*time pos= pos+ vel*time stabler than Euler; use this • pos= pos+ vel*time • vel= vel + acc*time

  12. Physics I Collision Response

  13. Collision response • you know how to detect whether 2 objects collide • how do we make objects respond in a physically believable way? • general strategy: • move objects out of collision • change their velocities

  14. Moving out of collision • many ways to move the ball out of the wall • we want the minimum • “minimum translation vector” (MTV) • same as overlap • for now, assume we can find MTV

  15. Changing velocity for collision • just reverse the object’s velocity? • reverse the y component? • reverse the perpendicular component? • what if 2 moving objects collide?

  16. 2-moving-object collisions • reverse both velocities? • doesn’t always work • apply equal and opposite forces • an instantaneous force is called an impulse

  17. Units without mass with mass (no equivalent) momentum kg m/s force kg m/s2 impulse kg m/s • position m • velocity m/s • acceleration m/s2

  18. Implementing force and impulse • applyForce(…) accumulates force • applyImpulse(…) accumulates impulse • onTick(…) applies force and impulse, clearing them for next frame • applyForce(…) and applyImpulse(…) only take effect on next onTick(…) • “static” (immovable) objects can override applyForce (…) and applyImpulse (…) and make them noops classEntity{ float mass; Vec2fpos, vel; Vec2fimpulse, force; voidapplyForce(Vec2ff) { force+= f; } void applyImpulse(Vec2fp) { impulse += p; } void onTick(float t) { vel += t*force/m + impulse/m; pos += t*vel; force= impulse = 0; } }

  19. Impulse collision response • translate objects out of collision • each by MTV/2 • or proportional to velocity in direction of MTV • apply some impulse proportional to MTV to each object • how much? • this week: guess/hack • next week: more realistic

  20. Collision callbacks void onCollide(Entity); void onCollide(Collision); • pass in other Entity • separate CollisionInfo object • pass in the MTV • maybe pass in which shapes collided • enemies with weak points • maybeallow callback to prevent solid collision response • one-way platforms classEntity { booleanonCollide(Collision); } classCollision { final Entityother; final Vec2fmtv; final ShapethisShape; final ShapeotherShape; }

  21. Physics I Minimum Translation Vector

  22. MTV in one dimension • in 1D, convex shapes are line segments (intervals) • these have a 1D MTV • similar to overlap • but it has a sign • write a method that computes this • use it to find shapes’ MTV

  23. Computing MTV • for each (normalized!) axis, find 1D MTV of shapes’ projections • find the axis giving minimum 1D MTV • 2D MTV is 1D MTV times that (normalized) axis

  24. MTV interactive demo • same as last week • arrows are potential MTVs for box against triangle • purple arrows are the actual MTV • SAT guarantees that MTV is on a separating axis

  25. Computing intervals’ MTV FloatintervalMTV(Interval a, Interval b) FloataRight= b.max - a.min FloataLeft = a.max- b.min ifaLeft< 0 || aRight < 0 returnnull ifaRight < aLeft returnaRight else return-aLeft

  26. Computing polygons’ MTV VecshapeMTV(Shape a, Shape b) FloatminMagnitude = +infinity Vecmtv = null forVec axis in allAxes Float mtv1d = intervalMTV(a.proj(axis), b.proj(axis)) if mtv1d is null returnnull if abs(mtv1d) < minMagnitude minMagnitude = abs(mtv1d) mtv = axis.smult(mtv1d) returnmtv

  27. Computing circles’ MTV • Circle vs Circle • compare dist(center1, center2) and sum of radii • MTV is parallel to line connecting centers • Circle vs Poly • use the same set of axes you did last week: • Poly’s edge normals • vector from circle center to closest vertex

  28. Computing circles’ MTV (ctd) • Circle vs Box • if Box contains circle center • use Box’s axes • otherwise • clamp circle center to Box • compare dist(center, clampedPoint) and radius • MTV is parallel to line connecting

  29. Computing boxes’ MTV • easy but inefficient way: • Box converts itself to a Poly • efficient way: • use (0, 1) and (1, 0) as the only 2 axes

  30. MTV pitfalls • be careful with signs and argument order • especially when reversing args for double dispatch • can use asserts: • MTV of shape A to move it out of shape B should point from Bto A • assert dot(MTV, A.center– B.center) > 0

  31. Physics I Questions?

  32. Lecture 5 Tips for MI

  33. Gravity • on each tick, for each entity e, e.applyForce(g.smult(e.mass)) • static objects’ applyForce does nothing

  34. Player motion • set velocity while left or right is held? • too sudden • can interact badly with other physics • apply force while left or right is held? • asteroids!

  35. Goal velocity • goalVelocity set directly from arrow keys • gradually set velocity to goalVelocity • by applying a force

  36. Tips for M I Questions?

  37. Annotations Java Tip of the Week

  38. Pitfalls of inheritance • Entity what if you change name? change arg types? might forget to change a subclass subclass’ method no longer overrides anything! how to avoid? • onTick(long) • onTick(float) • PhysicsEntity • onTick(long) • onTick(float) • Player • Enemy • Bullet • onTick(long) • onTick(long) • onTick(long) • onTick(float) • onTick(float)

  39. The @Overrideannotation • whenever you override a method, mark it @Override • if superclass changes, you get a compile error • Eclipse can insert these for you public class Entity { public voidonTick(float t) { // ... } } public classBullet extendsPhysicsEntity{ @Override publicvoid onTick(long t) { // ... } } Bullet.java:2: method does not override or  implementamethod from a supertype

  40. Other standard annotations • annotations can mark • classes • methods • fields • variables • parameters • can create your own… • see Oracle’s tutorial if you’re curious • @Deprecated • alternative to removing a method entirely • compile warning when marked method is used • @SuppressWarnings • tells the compiler not to catch you when you fall • avoid if at all possible

  41. Annotations Questions?

  42. Tou 2 playtesting! Hooray!

More Related