для початку можливо варто переглянути вашу логіку гри?
навіщо кожна платформа буде перевіряти hitTest.
я думаю це повинен перевіряти клас персонажа, адже він у нас пересувається по світу.
мувик на сцені з ім'ям pers
для того щоб достукатися до вашого pers необхідно пов'язати змінну в класі з сценою і далі звертатися через неї:
наприклад:
package import flash.display.Stage; // додаємо доступ до сцени
import flash.display.MovieClip;
import flash.display.DisplayObject;
.
public class Наш_Класс extends MovieClip private var _root: Object; // повідомляємо змінну _root як Object
public function Наш_Класс () // чтото там ваш клас инициализирует
// слухач з методом beginClass запуститься один раз при додаванні нашого екземпляр
addEventListener (Event.ADDED, beginClass);
addEventListener (Event.ENTER_FRAME, update, false, 0, true);
>
private function beginClass (event: Event): void _root = MovieClip (root);
>
public function update (e: Event): void var targetMarker: DisplayObject = _root.pers;
if (hitTestObject (targetMarker)) // ваші дії
>
>
>
>
ну або зробити як пише SteamRabbit - використовувати мувик з рівнем і маску рівня для TestObject
зіткнення йде по 4 сторонам, голова, задня частина тул, перед част тул, ноги, знаю що ховати треба, це кролика стосується, а ваш код, точніше відповідь незрозумілий, він розділений рекомендаціями, або рішення проблем дійствами?
ви запитали як дістатися до вашого персонажа з іншого класу, я вам навів конкретний приклад. код вище.
рекомендації?
да я вам рекомендував причепити перевірку на hitTset не на кожну платформу (може ми не правильно один одного зрозуміли? під платформами ви маєте на увазі частини рівня або базовий клас, який ви можливо назвали "platform"?) бо це клонує непотрібні перевірки і дії, а на клас вашого персонажа або ще краще як пише Gorynych на базовій клас
зіткнення йде по 4 сторонам, голова, задня частина тул, перед част тул, ноги
щоб зрозуміти що вам радити потрібно розуміти про що ви говорите. ось з цих слів більш менш зрозуміло що ви вибрали:
ви хочете перевіряти не по обьектам (hitTestObect), а по точках (hitTestPoint).
hitTestObect - перевіряє зіткнення по прямокутному контуру символу;
hitTestPoint - по входження точки нашого персонажа в перевіряється символ.
на кожен метод своя логіка буде.
якщо я правильно зрозумів Gorynych. то він як і я не розуміємо навіщо ви розширюєте клас
public class ControlKeyboard extends Level1
вам питання аби ви задумалися про логіку гри.
ви збираєтеся вішати руху / зіткнення гравця з навколишнім світом на кожен рівень окремо?
хоча насправді чи ви самі не уявляєте як буде відбуватися логіка вашої гри і що в якомусь касі відбувається, або ви просто неправильно назвали або не змогли донести призначення класу Level1.
зупиніться програмувати і намалюйте на папері своє уявлення класів і зв'язків між ними.
ось наприклад моє уявлення як має бути:
1. основний клас - смикає методи інших класів для створення менюшек, рівнів, додавання персонажа на стіл і управлінням об'єктами і тд.
2. клас персонажа - якщо основний персонаж 1 то має сенс додати слухач ENTER_FRAME і перевіряти всі дії і зіткнення Гравця в цьому класі.
якщо персонажів кілька то краще через методи або стану які буде смикати основному клас.
3. клас платформ - їх може бути кілька в залежності від взаємодії, або ж може бути клас платформ і дочірні класи (то як ви расшіралі ControlKeyboard extends Level1) кожен з яких має свої плюшки.
4. класи інших об'єктів. наприклад монети або колба з життями
5. клас роботи з клавой - можна винести. а вірніше навіть потрібно винести в окремий клас як ви і зробили
А давайте ви спочатку заспокоїти свої нерви.
public function loadBox (box): void
array.push (box);
>
Що я з цього можу зрозуміти? Що за бокси ви в масив додаєте?
вообщем то на сцені будь-мувик малюєш і всередині в кадрі першому пишеш - parent.loadBox (this)
взяв за основу статтю хитри -Простий платформний движок для флеш-ігор, переробив в as3 а там у них as2, ну не до кінця звичайно, хотів якраз таки розділити класи, тому як в уроці один рівень струму розглядається і все в купу, а я поділив, і ось навіщо хочу ділити, просто подивіться статтю і відразу зрозумієте мою думку
вообщем то на сцені будь-мувик малюєш і всередині в кадрі першому пишеш - parent.loadBox (this)
AS3 має на увазі що у вас на робочому столі, тобто вашої сцені, на момент початку компіляції проекту не буде жодного об'єкта.
всі об'єкти додаються на сцену динамічно:
addChield (об'єкт);
для більш точного вказівки можна вказати конкретно куди:
stage.addChield (об'єкт);
від as2 залишилося хіба що parent. в кадрі платформи кожної, немає, немає думки якомога ще робити не використовуючи, тут виходить просто мувик створюється, навіть ім'я писати не треба.
. і до речі ніж вас назва класу не влаштовує? controlKeyboard, типу контроль клави, управління
Ви не читали те, що я вам писав, або ви не розумієте що я вам писав? Позбутися від "parent" в кадрі легко!
Так же само малюєте платформи, створюєте мувик level1 і в ньому розставляєте платформи ЯК ВАМ УГОДНО. Ніяких імен платформ привласнювати не потрібно. Потім цей мувік level1 або додаєте програмно на сцену (addChaild (level1)), або фізично розміщуєте на сцені, і у властивостях привласнюєте ТІЛЬКИ мувіка з рівнем ім'я level1. Потім просто в будь-якому місці коду звідки є доступ до мувіка level1 пишете код:
Усе! І не потрібно граблів з кодом на кадрах.