Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Вопросы по созданию квестовой игры (http://www.flasher.ru/forum/showthread.php?t=123684)

Raddjuret 08.04.2009 04:22

Вопросы по созданию квестовой игры
 
Доброго времени суток.

Имею довольно ограниченные знания по AS, пишу на AS2 свой диплом.
Диплом - это квестовая игра. Иногда возникают затыки.

Затыки буду описывать по порядку. Чтобы темы не плодить. Так ведь можно? Да?

Итак, затык номер 1.

У меня на локации несколько объектов. Кликаешь на объект - внизу появляется текстовый коммент, что это за объект.
Висит это сообщение 4 секунды (например), а потом исчезает.

Пользуюсь функцией SetTimeout.

Код AS1/AS2:

var mind:String = "";//То что говорит герой об объекте
 
//Картина
pic.onPress = function(){
        p=setTimeout(empty,1000*4);
        mind = "Картина. Висит. ";
}
pic.onRelease = function(){
        clearTimeout(p);
}
        function empty(){
        mind = "";
}
 
//Книга
book.onPress = function(){
        b=setTimeout(empty,1000*4);
        mind = "Книга лежит на столе";
}
book.onRelease = function(){
        clearTimeout(b);
}
        function empty(){
        mind = "";
}

Проблема в том что видимо интервал неправильно очищается.

Потому что я например нажал на "Картину", подождал 2 секунды и нажал на "Книгу".

Должно быть: 2 секунды текста о "Картине" и 4 секунды текста о "Книге".
А вместо этого - 2 секунды о "Картине" и 2 секунды о "Книге"

Что я не так делаю?

iNils 08.04.2009 04:57

Любое нажатие должно отменять предыдущий интервал, а у вас этого не происходит. Зато отжатие очищает интервал запущенный нажатием, зачем?
И почему у вас два раза описана функция empty?

Raddjuret 20.04.2009 00:09

Так. По всплывающему тексту теперь всё как надо. Большое спасибо!

Затык номер 2.
По своей структуре диплом будет представлять собой "родительскую" флэшку, в которую будут подгружаться "дочерние". Потому что иначе если всё компилировать в один файл - грузиться он будет фиг знает как долго (это мы уже проходили)

Как я понял - единственный метод такой сцепки - использовать функцию loadMovieNum();

Пример: у меня 2 флэшки - родительская loc1.swf, дочерняя loc2.swf
В первой я прописываю переменную var quadro:Boolean = false;
Во второй условие - что если quadro = false то у объекта bquad параметр _visible = false;

1) Как сделать так, чтобы при подгрузке "дочерней" флэшки значение переменной quadro из "родительской" на неё повлияло и объект bquad действительно стал невидимым?
2) Есть ли другие методы сцепки разрозненных swf роликов?
* использование браузера в качестве посредника крайне не приветствуется. Проект хочется запускать в режиме fullscreen.

Wolsh 20.04.2009 02:13

Ну если непременно loadMovieNum, то Вы, видимо, имеете в виду ЗАМЕНУ свф-файла в плеере. Передать какой-то параметр при этом можно только через объект Global, и то не факт))) Мне вот только непонятно, что заставляет Вас так извращаться - неужели нельзя нормально подгрузить вторую флэшку В ПЕРВУЮ не выгружая эту первую, как собственно и делается во всех сайтах (к примеру)? Не ищете легких путей?

Raddjuret 20.04.2009 02:45

Wolsh

Я бы с удовольствием искал пути лёгкие. Просто в AS я разбираюсь плохо. А проект сдать надо. Потому постепенно осваиваю, ошибаюсь, что-то делаю вверх ногами..

Как подгрузить вторую флешку в первую?

Wolsh 20.04.2009 11:15

Ну извините, если что - не всегда можно сразу определить уровень опыта того кто спрашивает.
Подгружать лучше всего - используя класс MovieClipLoader. Он хорошо описан в хелпе и есть там пример, а на форуме просто пруд пруди - загрузка внешних файлов свф или картинок осуществляется одинаково - надо ли говорить, что это самая востребованная операция? Вкратце по-русски: создаете пустой мувиклип (createEmptyMovieClip), создаете новый экземпляр класса MovieClipLoader через new, добавляете ему слушателя сообщений о событиях (в отличие от ас1-методов лоадМуви и лоадМувиНум этот класс отлично сообщает о всех стадиях загрузки) - в хелпе для этого создается новый Object, в реальности же это не обязательно - слушать может любой объект, хоть рут. Слушателю назначаете метод, которым обрабатывать события лоадера, ну и собственно начинаете загрузку.
Код:

var container:MovieClip = this.createEmptyMovieClip("container", getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
mcLoader.addListener(this);
this.onLoadInit(mc:MovieClip) {
    trace("onLoadInit: " + mc);
}
mcLoader.loadClip("part2.swf", container);


Raddjuret 26.04.2011 00:38

Чтобы не плодить темы, напишу в собственной старой.
Продолжаю изыскания в области AS2

Допустим, у меня имеется кнопка (назову её starter) и имеется мувиклип (mc_1) с анимацией, в 1-м кадре которого прописан stop();

Для запуска анимации mc_1 кнопкой starter я пишу в кадре сцены код:
Код AS1/AS2:

starter.onRelease = function(){
        _root.mc_1.gotoAndPlay(2);
}

Всё работает.

Теперь допустим, что есть мувиклип mc_2 (с таким же stop() в первом кадре), который содержится в отдельном swf, загружаемом функцией loadMovieNum на level1

Задача: при нажатии на кнопку starter запустить и mc_1 и mc_2 одновременно.

Как в AS прописать обращение к мувиклипу флэшки подгружаемой извне? И возможно ли это?

iNils 26.04.2011 12:33

Цитата:

Чтобы не плодить темы, напишу в собственной старой.
О! Давайте из форума свалку устроим? А еще лучше, будем все вопросы писать в одной теме, а то наплодим их, а потом искать будет тяжело. А тут все сразу в одной теме. Удобно же.


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

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