Форум 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=195424)

vivado 06.03.2013 18:09

Взаимодействие объектов с разными классами
 
Всем привет,
Начал изучать классы. Есть объект "Enemy" в его классе прописано простейшее движение по X
и есть несколько объектов с классом "Marker" при соприкосновении с которыми "Enemy" Должен менять свою скорость на противоположную.

В классе Enemy пишу

Код AS3:

package  {
 
        import flash.display.*;
        import flash.events.*;
 
        public class Enemy extends MovieClip {
 
                public var EnemySpeed:Number = 3;
 
                public function Enemy() {
                        stage.addEventListener(Event.ENTER_FRAME, moveEnemy);
                }
 
                private function moveEnemy(event:Event) {
 
                //Код для изменения скорости(направления) движения
                        if (this.hitTestObject(marker)){
                                EnemySpeed=-EnemySpeed;
                        }
                        this.x+=EnemySpeed;
                }       
        }
}

Расставил объекты на сцене, проверяю - Пишет ошибку "Неявное приведение значения типа Class к несоответствующему типу flash.display:DisplayObject"

DaFive 06.03.2013 18:20

Какая строка кода? Где ошибка-то? Откуда берется marker? Ничо непонятно.

vivado 06.03.2013 18:22

marker - это просто объект с одноименным классом
Задача такая - на сцене объект с классом "Enemy" который должен двигаться между двумя объектами с классом "Marker" туда-сюда.

AlexLucas 06.03.2013 18:26

Раз у вас marker нигде не инициализируется, видимо это класс, а не объект.

iflamberg 06.03.2013 18:27

Код AS3:

if (this.hitTestObject(marker)){

Вот в том виде, что ты прислал эту строчку, этот код вообще не должен компилироваться. Ты что-то вырезал? Откуда берется marker? На него нет ни переменной в теле функции, ни свойства класса.
__
Аа. Ты туда, вместо ссылки на объект класса, пихаешь ссылку на сам класс. Гыгы, забавно.

vivado 06.03.2013 18:30

Еслиб это был объект с именем экземпляра "Marker" то код бы сработал. Просто не знаю как инициировать этот класс. Вопрос именно в том, как сделать чтоб "Enemy" реагировал на все объекты с классом "Marker"

AlexLucas 06.03.2013 18:37

В цикле проматываете через все объекты типа Marker которые находятся на сцене и проверяете коллизию hitTestObject'ом.
А объекты типа Marker лучше инициализировать в контейнере который должен содержать и Enemy и Marker'ы, и проверять коллизию тоже там. В вашем случае это наверное мэйн класс.

iflamberg 06.03.2013 18:40

Чтобы класс Enemy реагировал на объекты Marker, нужно передать ему ссылку на этот самый объект. Передать в конструкторе и хранить в свойстве класса, еще как-нибудь.
Вообще, логичнее было бы даже, чтобы класс сцены хранил в себе все экземпляры Enemy и Marker и проверял их всех на столкновения.
---
2AlexLucas: дай пять =)

vivado 06.03.2013 18:43

А если объектов "Enemy" будет несколько и маркеров тоже несколько?
Не могу немного логику понять, мне массив объектов "Enemy" нужно делать + массив объектов "Маркер"
а потом проверять каждый элемент одного массива на коллизию с каждым из элементов другого?

Добавлено через 48 секунд
Цитата:

Сообщение от iflamberg (Сообщение 1123891)
Чтобы класс Enemy реагировал на объекты Marker, нужно передать ему ссылку на этот самый объект. Передать в конструкторе и хранить в свойстве класса, еще как-нибудь.
Вообще, логичнее было бы даже, чтобы класс сцены хранил в себе все экземпляры Enemy и Marker и проверял их всех на столкновения.
---
2AlexLucas: дай пять =)

А как передать ссылку?
Просто неохота заморачиваться с массивами и циклами

iflamberg 06.03.2013 18:47

Код AS3:

А если объектов "Enemy" будет несколько и маркеров тоже несколько?
Не могу немного логику понять, мне массив объектов "Enemy" нужно делать + массив объектов "Маркер"
а потом проверять каждый элемент одного массива на коллизию с каждым из элементов другого?

Именно так. Прийдется заморачиваться и с массивами и с циклами. Фантастики не будет


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

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