Проверете сблъсъка между 2 форми

Пиша малка игра в as3 и трябва да проверя сблъсък между 2 лодки. Нямам нужда от перфектния сблъсък на пикселите, но сблъсъкът на границите също не е достатъчен. Лодката изглежда горе-долу така:

https://www.dropbox.com/s/197yqvzf2jaugtm/boats.JPG

Мислех да създам един квадрат отзад на лодката и триъгълник отпред, след което за всяка лодка проверете дали квадратът се сблъсква с другия квадрат или триъгълник на лодката и същото за триъгълника.

Просто не знам как да направя това, не знам дали е възможно с Shape.hitTest или дали това е най-добрият начин да го направя.

Какво мога да направя?


person user2295471    schedule 27.06.2013    source източник
comment
Нямам директен отговор на това, но си поиграх малко с някои наистина основни разработки на игри със стрелба отгоре надолу (без използване на библиотеки на трети страни само AS3 и може да съм използвал класа на Грант Скинър тук freeactionscript.com/2009/05/pixel-perfect-collision-detection) и извършването на откриване на удари с PNG изглежда се представи добре. Дори добавянето на тонове врагове на екрана и много ракети не изоставаше много, като се има предвид липсата на рамка/оптимизация.   -  person shaunhusain    schedule 27.06.2013
comment
При мен не работи, използвам starling като рамка за изграждане на моята игра. Този клас използва DiplayObjectContainer от flash, а аз използвам displayObjectContainer от starling.. Вече се опитах да променя импортирането, но също не работи   -  person user2295471    schedule 27.06.2013
comment
Използвайки Starling, както казвате, в крайна сметка използвате различен набор от обекти, които не наследяват от флаш API, те обикновено са с по-леко тегло според мен. Вижте дискусията тук: forum.starling-framework.org/topic/collision-detection Основното заключение е, че можете да използвате няколко правоъгълника за приближаване, тъй като текстурите са на графичния процесор, процесорът всъщност не може да получи информация за това къде е всеки пиксел (без да забавя графичния процесор, като по този начин отрича смисъла на използвайки GPU ускорение).   -  person shaunhusain    schedule 27.06.2013
comment
Ето защо се чудех дали не мога да създам форма във формата на лодка (като използвам повече или по-малко 5 точки) и да използвам Shape.hitTest за всяка точка на другата лодка, ако една от тях върне true, има сблъсък , но не знам как работи hitTest от Shapes. Това добро решение ли е? и ще работи ли   -  person user2295471    schedule 27.06.2013
comment
Да, сега разбирам вашето отклонение, но не съм го пробвал сам, ще потърся малко в документите и ще видя дали мога да посоча нещо. Мисля, че това, което се опитвате да направите, няма да се получи добре, по-добре е да се откажете от Starling, ако ще отразявате нещата, използвайки обектите на Flash дисплей, за да изчислите hitTest, не мисля ще работи за невидими обекти на дисплея. Ако се придържате към starling, мисля, че най-добрият ви залог е ръчно да направите откриването на попадение content.gpwiki.org/ index.php/Polygon_Collision точката в полигонното решение изглежда, че ще работи.   -  person shaunhusain    schedule 28.06.2013
comment
Трябва да остана със Старлинг. Това изглежда като добро решение, но какво да кажем за ротациите? :/   -  person user2295471    schedule 28.06.2013
comment
Мисля, че ще трябва да дефинирате многоъгълника като масив от точки и да изградите свой собствен фигурен обект, който ще ви каже какви са точките след завъртане, така че да можете да разделите притесненията за определяне на многоъгълните точки и извършване на откриване на сблъсък: stackoverflow.com/questions/10533403/ Като се има предвид сложността на задачата, силно бих помислил просто да използвам множество правоъгълници и метода на пресичане вместо това, като използвате 4 или повече правоъгълника, можете да приближите заострената част на лодка (въртене все още може да усложни нещата).   -  person shaunhusain    schedule 28.06.2013
comment
Този урок може да бъде полезен: sevenson.com.au/actionscript/sat   -  person Marty    schedule 28.06.2013


Отговори (1)


Опитайте тази,

var isTouched:Boolean = item1.bounds.intersects(item2.bounds);

когато и двете се докоснат, ще се върне true;

person Saygın Karahan    schedule 13.08.2013