Platform 클래스의 모든 인스턴스를 Array에 배치하고 각각에 대해 a를 실행하여 AS3에서 플랫폼 게임을 작성하려고합니다. hitTestObject를 루프하여 플레이어가 그 중 하나를 터치하고 있는지 확인하십시오.'for each'루프의 AS3 배열 히트 테스트는 배열의 마지막 객체에서만 제대로 작동합니다.
내 문제는 플레이어가 배열의 각 플랫폼을 만지기 위해 정확하게 반응하는 동안 (즉, 플랫폼의 맨 위로 떨어지는 것을 멈추고 y 위치를 설정하는 것), 나는 점프 기능을 수행 할 수 있습니다. 배열의 마지막 플랫폼.
나는 ActionScript에 상당히 익숙하지 않아 왜 이런 일이 일어나는 지 잘 모릅니다. '각 루프마다'라는 말은 각 플랫폼이 동일한 방식으로 작동해야한다는 것을 의미합니다. 코드 중 일부는 각 플랫폼에서 제대로 작동하지만 어떤 이유로 플레이어가 점프 할 수있는 코드가 아닙니다.
왜 이런 일이 일어나고 있는지 해결책을 제시 할 수 있다면 매우 감사하게 생각합니다. 이것은 며칠 동안 나를 벽으로 몰고왔다.
다음은 관련 코드입니다. 이 함수는 입력 프레임 수신기에서 호출됩니다.
private function collisionTestPlatforms (event:Event) : void {
for each (var i:Platform in aPlatforms) {
if (player.hitTestObject(i)) {
Player.touchingGround = true;
player.y = i.y - 25;
Player.yVelocity = 0;
} else {
Player.touchingGround = false;
}
}
}
대단히 감사합니다. DodgerThud의 제안 @를 유사
Perhaphs을 당신이 collisionTestPlatforms''의 단일 실행을 작성하는 경우이 문제를 해결하는 것이 더 쉽습니다. 2 개의 플랫폼이 있다고 가정하십시오. 플레이어는 플랫폼 1에 선다. 실행이 완료되면 Player.touchingGround가 true 또는 false가 될 것인가? 대답은 거짓입니다. 왜? foreach 루프가 계속 진행되므로 플랫폼 2를 확인하고 플레이어가 플랫폼 1에 서 있기 때문에 else 절로 이동합니다. 플랫폼에 도달하면 반복적으로 루프를 중단시키는 간단한 수정이 필요합니다. – DodgerThud
그것은 작동합니다! 그리고 당신의 설명도 훌륭하게 도움이되었습니다 - 지금 내가 잘못하고있는 것을 이해합니다. 신속하고 유용한 답장을 보내 주셔서 감사합니다. –