Hi! Thanks for working on this, Joachim. On 09/24/2012 11:36 PM, Joachim Breitner wrote: > [...] > The state changes in the beginning in the good case are: > > State {action = Airborne, direction = HRight, feetVelocity = 0.0, jumpInformation = JumpInformation {jumpStartTime = Nothing, jumpCollisionAngle = Nothing, jumpNikkiVelocity = Vector 0.0 0.0, jumpButtonDirection = Nothing}, ghostTimes = GhostTimes {standingGhostTime_ = Nothing, wallSlideGhostTime_ = Nothing}} > State {action = Airborne, direction = HRight, feetVelocity = -0.0, jumpInformation = JumpInformation {jumpStartTime = Nothing, jumpCollisionAngle = Nothing, jumpNikkiVelocity = Vector 0.0 0.0, jumpButtonDirection = Nothing}, ghostTimes = GhostTimes {standingGhostTime_ = Nothing, wallSlideGhostTime_ = Nothing}} > State {action = Wait {collision = NikkiCollision {nikkiCollisionShape = <Shape>, nikkiCollisionAngle = 0.0, nikkiCollisionPosition = Vector (-208.0) (-64.0), nikkiCollisionType = NikkiLegsCT}, ghost = False}, direction = HRight, feetVelocity = 0.0, jumpInformation = JumpInformation {jumpStartTime = Nothing, jumpCollisionAngle = Nothing, jumpNikkiVelocity = Vector 0.0 0.0, jumpButtonDirection = Nothing}, ghostTimes = GhostTimes {standingGhostTime_ = Nothing, wallSlideGhostTime_ = Nothing}} > > in the bad case, it does not enter NikkiCollision. Maybe a rounding > error? The state should definitely enter into "action = Wait {..." when Nikki touches the ground. > > In the cood case, "nikkiCollisions contacts" returns > [NikkiCollision {nikkiCollisionShape = <Shape>, nikkiCollisionAngle = 0.0, nikkiCollisionPosition = Vector (-208.0) (-64.0), nikkiCollisionType = NikkiLegsCT}] > and in the base case nothing. So what does contacts contain? 'contacts' should contain all relevant collisions for the game logic. The creation of 'contacts' is defined in Object.Contacts. Also, the contacts don't only appear once when a collision starts, they should be reported continuously while a collision exists. > Maybe the Chipmunk callbacks are broken? > [reorder...] > If you, Söhnke, cannot reproduce it then it might be a library version > issue. This is libchipmunk 5.3.4-1 here. We use the version of chipmunk that ships with the current Hipmunk package, which is 5.3.5. So this could be a chipmunk bug. If I get to it, I will try to build Hipmunk with chipmunk-5.3.4-1 to confirm this. Maybe someone on debian could try out the 5.3.5 version? (By using Hipmunk from hackage.) > Anyways, enough for now. Guess I’m not very helpful. But in any case I > can reliably reproduce it by just restarting a level until Nikki hangs > in mid-air with in the jumping state. I can turn him around, but not > move him or make him jump. Your efforts are very helpful. Now we know, it has something to do with the collision detection. That's very valuable. Cheers, Sönke
Attachment:
signature.asc
Description: OpenPGP digital signature