AS3 Как общаться между фреймами

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

Прочитав довольно много ("Founding Game Design with Flash" и ряд статей, учебных пособий, форумов и т. д.), я решил использовать класс документа. Это тоже не сработало. Кажется, это работает только для одного кадра, но не для остальных кадров (у меня их четыре).

Как сделать так, чтобы четвертый кадр реагировал на то, что произошло в первом кадре? Например, если игрок достигает чего-то в первом кадре, я хочу, чтобы фрагмент ролика в четвертом кадре был виден.


person Syed    schedule 27.04.2013    source источник
comment
Можете ли вы показать часть вашего класса документов? Дайте нам знать, что вы пробовали.   -  person Rajneesh Gaikwad    schedule 27.04.2013
comment
Используете ли вы код временной шкалы и класс документа для запуска логики?   -  person Rajneesh Gaikwad    schedule 27.04.2013
comment
Да, я использую как код временной шкалы, так и класс документа. Мой вопрос действительно в том, как вы рекомендуете мне писать код, который влияет на все кадры? Как заставить четвертый кадр реагировать на то, что произошло в первом кадре?   -  person Syed    schedule 28.04.2013
comment
Я попытался объявить экземпляры этапа как в классе документа, так и на временной шкале. Кажется, что код временной шкалы может отправлять класс документа, но класс документа не может хранить информацию между кадрами. Единственным исключением является первый кадр. В настройках публикации на вкладке настроек (которая выглядит как гаечный ключ) я могу экспортировать в другой кадр, но не в несколько кадров. Возможно ли, чтобы действия одного кадра влияли на другой кадр? Это мой вопрос.   -  person Syed    schedule 28.04.2013


Ответы (3)


Если вы пишете свой код на временной шкале, я предлагаю создать два слоя на временной шкале, один для «кадровых действий» — в этот слой вы вставляете код, специфичный для одного кадра (будет работать, когда мувиклип остановлен). на этом конкретном кадре).. А также создайте еще один слой, называемый глобальными действиями (для всей временной шкалы). Только первый кадр будет ключевым кадром, и до конца временной шкалы должны быть пустые кадры. В действиях этого слоя напишите код, к которому вы хотите получить доступ из любого ключевого кадра на той же временной шкале.

Если вы определите переменную в действиях, которые записываются для всей временной шкалы (глобальные действия), то это будет доступно на всех кадрах.

Теперь, если вы хотите перейти к другому кадру на основе какого-либо действия, просто напишите несколько функций в слое, содержащем глобальные действия, и вызовите эту конкретную функцию через действия кадра. Чтобы перейти к другому кадру, используйте функцию flash «gotoAndStop(frameNumber)».

Я хочу сказать вам, что пока он будет работать, я бы не рекомендовал использовать его таким образом.

ХТН.

person dexterous    schedule 29.04.2013
comment
Что касается вашего последнего предложения - я чувствую то же самое по поводу ответа, который я дал, самая большая проблема с Flash - это столкновение между концепцией временной шкалы / кадров и написанием сценариев для них, это часто нелогично или кажется запутанным. - person MickMalone1983; 29.04.2013
comment
@Mick и Dex Кажется, что в любом из ваших ответов мне нужно будет ограничить объем кода в моей игре одним кадром. Поскольку я использую Flash, я просто создам много слоев и обработаю игровую логику в классах для символов, классе документа, коде временной шкалы и классе глобальных действий для всей временной шкалы (глобальные действия еще не до конца понятны). В любом случае, это действительно переворачивает весь мой подход с ног на голову, но это то, что мне было нужно. К сожалению, на рынке, похоже, нет серьезных книг по дизайну Flash-игр. Просто в основном вещи для детей. - person Syed; 29.04.2013
comment
Я давно не создавал флеш-игры, но я обнаружил, что сценарии для разных фреймов всегда вызывают больше проблем, чем решают, когда игра достигает определенного уровня сложности. Вы по-прежнему можете использовать кадры и использовать преимущества их существования, но использовать один кадр на основной временной шкале и с его помощью управлять точкой воспроизведения дочерних мувиклипов. У вас есть большой опыт кодирования на других платформах? - person MickMalone1983; 29.04.2013
comment
Спасибо за вклад, Мик. Я тоже это заметил. Хранение всего в одном кадре, безусловно, лучший способ для игр. - person Syed; 08.05.2013

Вы можете использовать статические переменные — это переменные, которые связаны с классом, а не с его экземпляром.

Предположим, ваш класс документа называется Document.as, и вы хотите, чтобы переменная playerLives была видна из любой части программы.

Объявите его внутри Document.as:

public static var playerLives:int = 3;

Затем вы можете ссылаться на это напрямую из любого места вашего кода с помощью:

Document.playerLives

(обратите внимание, что переменная является членом самого класса, а не его экземпляром).

Вы можете использовать специальный класс статики для хранения этих переменных, если хотите, чтобы ваш документ был аккуратным, или прикрепить их к соответствующим классам (например, Player.lives)

Я не использовал временную шкалу/кадры в течение нескольких лет, но я думаю, что раньше делал это именно так!

NB Статика подойдет для ваших целей, но в некотором смысле она эквивалентна переменной _global в AS2 (по крайней мере, ее можно использовать таким же образом) — многие не одобрят ее использование или чрезмерное использование. , так как они свободно доступны из любого места вашей программы (таким образом, анафема концепции объектно-ориентированной инкапсуляции), но лично я стараюсь не беспокоиться об этом в небольших случаях — самое важное, что нужно знать о правилах любого шаблона проектирования, — это когда их можно сломать!

Доступ к ним также немного медленнее, чем к членам экземпляра, но вы не заметите этого, если не будете постоянно обращаться к ним/изменять их (делать такие вещи, как скорость игрока, на которую нужно ссылаться/изменять каждый кадр, статической, не очень хорошо). идея).

Надеюсь это поможет.

person MickMalone1983    schedule 29.04.2013

Вы можете обнаружить, что самый простой способ связать все с классом документа — это переместить четыре кадра в мувиклип вместе и разместить его в первом кадре, а затем взаимодействовать с этим мувиклипом.

Например. в классе документа, где экземпляр мувиклипа на временной шкале называется «игра».

game.gotoAndStop(4);
game.objectToDisplay.visible = true;

Если вы столкнулись с ошибками ссылок в IDE, вы можете избежать их, используя нотацию [] для ссылки на свойства игры, например. игра["objectToDisplay"].visible = true;

Обратите внимание, что это не лучшая практика, но это, по крайней мере, поможет вам закончить ту первую игру, которая действительно более важна на данном этапе вашего обучения. После этого, если вы хотите узнать больше, я бы порекомендовал «The Essential Guide to Flash Games» Джеффа Фултона с 8bitrocket.com — он научит вас эффективно использовать класс документа.

person adamfsk    schedule 29.04.2013
comment
Я научился избегать кода временной шкалы для всего, кроме самых простых вещей. В основном только для анимации мувиклипов и кнопок. Наилучший подход для игр, который я нашел, — это поместить анимацию и код в символы, а затем добавить их в первый кадр. Затем используйте класс документа, чтобы добавить или удалить их. - person Syed; 17.06.2013
comment
@Syed Ввод кода в символы также не рекомендуется (кроме вызова stop() для остановки анимации, где это необходимо) - если вам нужен код для объекта в вашей библиотеке, лучше поместить его в класс actionscript для этого типа объекта и свяжите символы с кодом на панели свойств. Даже это не обязательно идеально, но кое-что упрощает. - person adamfsk; 04.07.2013
comment
@Syed Код на символах - это то, как это нужно было делать в дни AS1/2, но огромным недостатком является то, что позже очень сложно найти (и изменить) свой код, и поскольку как программист вы тратите гораздо больше времени на чтение код, чем писать его, это намного проще, если вы можете найти код, который вам нужно прочитать, как можно быстрее и проще!! - person adamfsk; 04.07.2013
comment
@Syed Еще один ресурс, который может оказаться полезным, — это видеоуроки Колина Мука «Потерянные выходные» или его книга amazon.com/Essential-ActionScript-3-0-Colin-Moock/dp/0596526946, который охватывает идентичный материал - person adamfsk; 04.07.2013