Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Столкновения элементов (http://www.flasher.ru/forum/showthread.php?t=202562)

Айдар 23.07.2013 19:17

Столкновения элементов
 
Как осуществить столкновение так, чтобы на сцене могло быть больше одного элемента каждого класса?

Код AS3:

function addAsteroid(e:TimerEvent):void 
{
        var asteroid:Asteroid = new Asteroid();
        asteroid.x= Math.random()*807;
        asteroid.y= 0;
        addChild(asteroid);
}
 
function addBullet(e:MouseEvent ):void
{
        var bullet:Bullet = new Bullet();
        bullet.x = ship.x;
        bullet.y = ship.y;
        addChild(bullet);
}
 
if (bullet.hitTestObject(asteroid)) //Обращение несуществующего свойства bullet 
//Обращение несуществующего свойства asteroid
        {
                removeChild(bullet)//Обращение несуществующего свойства bullet
                removeChild(asteroid)//Обращение несуществующего свойства asteroid
        }


AlexCooper 23.07.2013 20:49

Вы переменные создаете внутри функций и не передаете на них ссылки никуда. Соотвествено они видны только в функциях. Либо передавайте ссылки либо создавайте переменные вне функций

Айдар 23.07.2013 21:00

AlexCooper, если создавать переменные вне функций, то на сцене могут присутствовать только по одному элементу каждого класса, а насчет передачи ссылок, я не понимаю как это делать, не могли бы вы объяснить немного)

AlexCooper 23.07.2013 21:20

Это просто. Создаете к примеру массивы вне функций
Код AS3:

private var allBullet:Vector.<Bullet> = new Vector.<Bullet>;
private var allAsteroid:Vector.<Asteroid> = new Vector.<Asteroid>;
 
function addAsteroid(e:TimerEvent):void
{
        var asteroid:Asteroid = new Asteroid();
        asteroid.x= Math.random()*807;
        asteroid.y= 0;
        addChild(asteroid);
        allAsteroid.push(asteroid);
}
 
function addBullet(e:MouseEvent ):void
{
        var bullet:Bullet = new Bullet();
        bullet.x = ship.x;
        bullet.y = ship.y;
        addChild(bullet);
        allBullet.push(bullet);
 
}
 
var bullet:Bullet;
var aster:Asteroid;
 
for (var bullet_id:uint in allBullet) {
        for (var asteroid_id:uint in allAsteroid) {
 
                bullet = allBullet[bullet_id];
                asteroid= allAsteroid[asteroid_id];
 
                if (bullet.hitTestObject(asteroid))
                {
                        removeChild(bullet);
                        removeChild(asteroid);
 
                        delete allBullet[bullet_id];
                        delete allAsteroid[asteroid_id];
                }
 
        }
}


Айдар 23.07.2013 21:41

Пишет ошибку "Неявное приведение значения типа String к несоответствующему типу uint." в циклах.
Если вместо uint прописать String, то столкновения не происходит(

AlexCooper 23.07.2013 21:53

хм... всё верно, пропишите стринг. Попробуйте протрейсить
Код AS3:

if (bullet.hitTestObject(asteroid))

Добавлено через 5 минут
Лучше конечно выгрузите исходники, подкорректирую. Будет быстрей всего. Если не для всеобщего в скайп: alexscript или icq: 71-000-95

Айдар 23.07.2013 22:05

Вложений: 1
Вот исходники

AlexCooper 23.07.2013 23:37

Вложений: 1
Учитесь писать в классах. Писать в кадрах очень плохо.

И не забудьте удалять пули если они вылетели за экран.

Айдар 24.07.2013 08:49

Спасибо)


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

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