Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   как отловить столкновение с случайным объектом? (http://www.flasher.ru/forum/showthread.php?t=68094)

ZЭТ 19.08.2005 11:39

как отловить столкновение с случайным объектом?
 
как определить столкновение с совершенно случайнм объектом?

iNils 19.08.2005 11:41

А есть не совершенно случайный объект?:)

hitTest

ZЭТ 19.08.2005 11:46

Цитата:

Сообщение от iNils
А есть не совершенно случайный объект?:)

hitTest

Так и думал что напишут с ХитТест... :), но лучше все-таки со случайным: ведь если будет около 500 объектов, которые генеряться - запаришься к ним Хит Тест писать - это около 1000 лишних строк кода(ну побольше)

iNils 19.08.2005 11:48

другого варианат я не встречал. но действительно если 500 объектов, то надо в цикле все сверять. иначе нельзя.

Жень Шень 19.08.2005 16:40

привет!
вопрос я понял так: есть некий объект и надо отловить его столкновение с 500-ми генерироваными.
вот, как идея:
может стоит написать прототип "генератам" ( :) ) с методом хиттест на этот некий объект?

Король 19.08.2005 17:00

отсекай те объекты (а их будет наверняка большинство), с которыми столкновение в принципе невозможно. с остальными в цикле проверяй хиттест или считай геометрически - смотря какие объекты

ZЭТ 19.08.2005 17:15

Цитата:

Сообщение от король
отсекай те объекты (а их будет наверняка большинство), с которыми столкновение в принципе невозможно. с остальными в цикле проверяй хиттест или считай геометрически - смотря какие объекты

смотри я пытаюсь сделать гэлэкси, как ты предложишь мне отсечь те объекты в которых в принципе столкновение невозможно??? там ведь куда попадет, туда попадет... так что...

K.A.T.A.F.A.L.K.E.R 19.08.2005 17:42

Типа, много объектов на экране? Тады нафик хиттест? Я лично понимаю так: много объектов на экране => объекты маленькие... Так пиши просто "если расстояние меньше радиуса первого+радиус второго (раз маленькие - значит, почти шарики :) ) - БАХ! (ну ты понял)" где проверять? Создай отдельный мувик(рут подойдет ;)) и пиши
for(i=1;i<NUM;i++){
for(j=i+1;j<=NUM; j++){
clip1 = eval("meteoritiliasteroid" add i);
clip2 = eval("meteoritiliasteroid" add j);
//Проверка радиусов клипов clip1 и clip2...
}
}
эта ерунда должна работать более-менее быстро, так как проверяет сначала не произошло ли столкновения первого с остальными, потом второго с остальными кроме первого (это уже проверили) и т.д.

ZЭТ 19.08.2005 18:01

Цитата:

Сообщение от K.A.T.A.F.A.L.K.E.R
for(i=1;i<NUM;i++){
for(j=i+1;j<=NUM; j++){
clip1 = eval("meteoritiliasteroid" add i);
clip2 = eval("meteoritiliasteroid" add j);
//Проверка радиусов клипов clip1 и clip2...
}
}

Я только в принципе осваиваю экшн скрипт, не можешь пояснить код??
"meteoritiliasteroid" - это название или, если название то чего??
Напиши лучше полный код плиз с пояснениями

K.A.T.A.F.A.L.K.E.R 19.08.2005 18:14

ну допустим у тебя есть астероиды... Имена у астероидов - "asteroid1","asteroid2","asteroid3","asteroid4","asteroid5" и т.д. и т.п. Тогда дабы добраться до N-го астероида тебе нужно написать, скажем,
clipAsteroid = eval("asteroid" add N).
Можно еще там _root["asteroid" add N], вообщем, много способов... Но этот почему-то мне нравится больше всего. Слово красивое :) А насчет проверки там - ну пиши
Asteroid1 = eval("asteroid" add i);
Asteroid2 = eval("asteroid" add j);
distance = Math.sqrt(Math.pow(Asteroid1._x-Asteroid2._x,2)+Math.pow(Asteroid1._y-Asteroid2._y,2));
if(distance<=Asteroid1.radius+Asteroid2.radius){
//делаешь то что надо делать при их столкновении
}
ну и предварительно задавай каждому значение radius... Можешь через prototype...
Но все это для того чтобы просчитать их столкновения друг с другом (тебе ж это надо было?)

ZЭТ 19.08.2005 18:18

У тебя флэш какой версии?? А то "add" вроде в 4 используется :)
Цитата:

Но все это для того чтобы просчитать их столкновения друг с другом (тебе ж это надо было?)
ага - ну я гляну .

Король 19.08.2005 19:32

гэлэкси? что это? что куда попадет? ты бы объяснил сначала что ты хочешь. в любом случае можно найти решение, если подумать

K.A.T.A.F.A.L.K.E.R 20.08.2005 00:19

add в четвертом? Вот уж не помню - давно было... Там, по-моему, & есть, а здесь это уже бинарный оператор, так что звЫняйте :)

ZЭТ 20.08.2005 13:58

Цитата:

ну и предварительно задавай каждому значение radius... Можешь через prototype...
а не скажешь, как он работает?? и что можно через него делать?

artcraft 20.08.2005 18:38

если столкновения астероидов друг между другом отслеживать не надо, то предлагаю упростить:
засунуть все астероиды в один мувик
а потом проверять хиттест в нескольких точках звездолёта (по периметру) сразу со всеми астероидами

а скрипт с циклом на проверку дистанций до 500 астероидов боюсь будет тормозить :~)

ZЭТ 20.08.2005 18:55

да я уже нашел легкий способ, там по другому делается

artcraft 20.08.2005 19:03

Цитата:

Сообщение от zэт
да я уже нашел легкий способ, там по другому делается

интересно по какому :~)

ZЭТ 20.08.2005 19:20

жень шень: привет!
вопрос я понял так: есть некий объект и надо отловить его столкновение с 500-ми генерироваными.
вот, как идея:
может стоит написать прототип "генератам" ( ) с методом хиттест на этот некий объект?

я не знаю что за прототип, но сделал наподобие этого - так как генерируемого клипа нету, я сделал внутри создаваемого еще один видеоклип и к нему приписал код хиттеста с нужными объектами :)
вот и все.

У меня еще вопрос - как генерить рандомные числа в диапазоне от -ХХ до +ХХ

Fl00r 20.08.2005 19:33

max = 200;
x = random(2*max+1);
result = max-x;


Часовой пояс GMT +4, время: 07:03.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.