Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.03.2013, 18:09
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 1  
Ответить с цитированием
vivado

Регистрация: Aug 2010
Сообщений: 282
По умолчанию Взаимодействие объектов с разными классами

Всем привет,
Начал изучать классы. Есть объект "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.displayisplayObject"

Старый 06.03.2013, 18:20
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 2  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
Какая строка кода? Где ошибка-то? Откуда берется marker? Ничо непонятно.
__________________
Кодинг, багинг, алгоритминг. me @

Старый 06.03.2013, 18:22
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 3  
Ответить с цитированием
vivado

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

Старый 06.03.2013, 18:26
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 4  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Раз у вас marker нигде не инициализируется, видимо это класс, а не объект.

Старый 06.03.2013, 18:27
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 5  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Код AS3:
if (this.hitTestObject(marker)){
Вот в том виде, что ты прислал эту строчку, этот код вообще не должен компилироваться. Ты что-то вырезал? Откуда берется marker? На него нет ни переменной в теле функции, ни свойства класса.
__
Аа. Ты туда, вместо ссылки на объект класса, пихаешь ссылку на сам класс. Гыгы, забавно.
__________________
мой пустой блог

Старый 06.03.2013, 18:30
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 6  
Ответить с цитированием
vivado

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

Старый 06.03.2013, 18:37
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 7  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

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

Старый 06.03.2013, 18:40
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 8  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

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

Старый 06.03.2013, 18:43
vivado вне форума Посмотреть профиль Отправить личное сообщение для vivado Найти все сообщения от vivado
  № 9  
Ответить с цитированием
vivado

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

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

Старый 06.03.2013, 18:47
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 10  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Код AS3:
А если объектов "Enemy" будет несколько и маркеров тоже несколько?
Не могу немного логику понять, мне массив объектов "Enemy" нужно делать + массив объектов "Маркер"
а потом проверять каждый элемент одного массива на коллизию с каждым из элементов другого?
Именно так. Прийдется заморачиваться и с массивами и с циклами. Фантастики не будет
__________________
мой пустой блог

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
взаимодействие классов

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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