문제

나는 볼 모양이 다른 종류의 모양 일 때 "보잉"소리를 연주하려고합니다. 작동합니다. 하지만 조금 잘 작동합니다 ....

공이 휴식을 취하거나 굴러 가기 시작하면 만지는 모든 것과 영구적으로 충돌하여 "보잉"소리가 끊임없이 불을 피 웁니다.

Chipmunk 문서에서 두 가지가 영구적으로 충돌하는시기를 알려주는 것을 찾을 수 없습니다. 그래서 나는 현재 충돌과의 마지막 충돌을 비교하는 일종의 타이머로 어떻게 든 스스로 알아 내야 할 것이라고 생각합니다. 그러나 그것은 나에게 해킹된다.

이 문제를 해결 한 사람이 있습니까? 어떻게 해결 했습니까?

도움이 되었습니까?

해결책

접촉이 깨질 때 "보잉"소리를 재생할 수 없습니까? Chipmunk에는 콜백이 있습니다. typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, struct cpSpace *space, void *data)

그렇게하면 튀어 나올 때마다 보잉을 얻지 만, 그냥 굴릴 때는 아닙니다. '코스, 당신은 또한 당신의 모양에서 롤링 될 때 하나를 얻을 수 있지만, 그것은 당신이 그것을 보는 방법에 따라 특징 일 수 있습니다.

다른 팁

나는 내가 말하려고하는 것이 좋은 관행이라고 생각하지 않지만, 그것이 당신의 문제를 해결할 것이라고 확신합니다.

  1. 각 객체에 대해 두 개의 상태 변수를 유지하십시오. (1) 마지막 객체와 충돌 한 (2) 마지막 충돌 시간.

  2. 충돌시, 충돌 된 물체가 다르고 (그리고 공이) 마지막 충돌 이후 특정 "델타 시간"이 경과 한 경우에만 소리를 재생하십시오. 그런 다음 마지막 충돌 통계를 기록하십시오.

이것은 매우 간단하고 매우 효과적입니다.

// In your ball interface
id lastCollisionObject;
double lastCollisionTime;


// When a collision occurs...
double now = GetTime();
id other = GetCollisionObject();
if ((now - lastCollisionTime) > 0.3 || other != lastCollisionObject) {
    PlaySound(kBoingSound);
}
lastCollisionObject = other;
lastCollisionTime = now;

모양은 다람쥐의 속도가 없습니다. 그들이 그것을 가지고있는 시체. "myshape.body-> v"와 같이 속도에 액세스 할 수 있습니다. 나는 당신이 속도가 '충격'이 언제 발생하는지 알기 위해 특정 임계 값을 초과하는지 확인할 수 있어야한다는 데 동의합니다. 또한 회전 속도를 확인하여 공이 굴러 가는지 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top