나는 한동안 히트 감지 알고리즘을 연구 해왔다. 배열에있는 일련의 사각형을 가지고 있으며 루프를 통해 배열을 살펴본 후 항목 (버스)가 교차하고 있습니다.액션 스크립트 : 교차하지 않는 여러 오브젝트가 교차합니까?
// Gets important variables from controller class
var blocks:Array = main.blocks;
var map:Map = main.game.gameMap;
var game:GameMapScreen = main.game;
var bus:Bus = main.game.gameMap.bus;
var busSpeed:uint = 5;
// Centers the 'map' around the 'bus'
game.x = (bus.x) * -1 + stage.stageWidth/2;
game.y = (bus.y) * -1 + stage.stageHeight/2;
map.setChildIndex(bus, map.numChildren - 1);
// Creates the new x and y values for where the bus will move
var angle:Number = (bus.rotation/360) * (Math.PI * 2);
var dx:Number = Math.cos(angle);
var dy:Number = Math.sin(angle);
var newX:Number = dx * busSpeed;
var newY:Number = dy * busSpeed;
// Gets a clone of rectangle around bus, moves it to new x and y
busRect.x += newX;
busRect.y += newY;
하고 그럼 블록 어레이를 통과하고 다시 버스 직사각형 각 블록의 직사각형
var hitting:Boolean = false;
for(var i:uint = 0; i < blocks.length; i++)
{
if(busRect.intersects(blocks[i].getRect(map))
{
hitting = true;
break;
}
}
테스트 후 타격 있는지 확인 다음과 같이
원래 코드 간다 , 그렇지 않으면 이동합니다.
if(!hitting)
{
bus.x += newX;
bus.y += newY;
}
내가 발견 한 문제는 버스가 블록을 교차시키지 않으면 두 블록을 "교차"하는 것처럼 보입니다.
블록은 교차하지 않아야하는 중간에 공백이있는 격자 모양으로 정렬되어 있지만 실제로는 블록을 삽입 할 때 교차점 2와 1 인 것처럼 보입니다.
여러 번 확인하고 다른 사람들과상의 한 후에는 문제를 파악할 수 없습니다. 우리가 유행처럼 그리드에 블록을 배열하고 어레이에 스틱을 넣은 다음 무언가를 때리는 지 확인합니다. 실제로 교차하지 않으면 2 블록을 교차하고 교차하는 경우 1 블록을 찾습니다.
아이디어가 있으십니까?
예 - 그 뜻입니다. 죄송합니다. 다른 컴퓨터에서 복사하고 있습니다. –
'Rectangle' 클래스에는'intersections' 함수가 없습니다. '교차'또는 '교차'를 의미합니까? – samgak
또한, 버스를 움직일 때'x'와'y'를 그 값으로 설정하는 대신'newX','newY'를 추가해야합니까? – samgak