Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Статьи (http://www.flasher.ru/forum/forumdisplay.php?f=101)
-   -   Знакомство с Flash 9 и ActionScript 3.0 на примере создания аркадной игры (http://www.flasher.ru/forum/showthread.php?t=83431)

Jackson 02.10.2010 03:39

Чет я не могу понять, что надо делать:
Цитата:

Делаем мувик preloader который состоит из текстового поля (txt) и прогрессбара (progress - мувик состоящий из 100 кадров, будем позиционировать кадр в зависимости от того, сколько процентов флешки загрузилось). Мувиклипу прелоадера прописываем класс main.preloader
Подскажите, что, где нажать...

Psycho Tiger,где этот код писать надо?И как потом в этот мувик картинку вставить?Разве это делается не на сцене Flash?

Psycho Tiger 02.10.2010 20:09

Ну ээ... где хочется создать - там и пишется. Я статью читал несколько лет назад, да и то мельком. Вставлять картинку addChild. На сцену Flash (Вы про Flash IDE?) по сути добавлять что-либо вообще не рекомендуется, для программистов. Гораздо более гибкий вариант добавлять это программно. Хотя бы потому что если с Вашим кодом потом кто-то будет работать, кто компилирует без Flash IDE - ему это будет не так болезненно.

Vansimar 07.10.2010 22:18

здоровская статья)спасибо!

kluv666 11.11.2010 13:25

Всем привет, перечитал всю тему, юзаю CS5 и возникла проблема (выше она уже была) но т.к. люди которые давали ответы юзали не CS5 они мне не помогли,

при присвоении:
this.txt.text = "Loading..." ругается. "Термин не определен и не имеет свойств"

код:

Код AS3:

package main {
        import flash.display.MovieClip;
        import flash.events.*;
 
        dynamic public class Preloader extends MovieClip {
 
                public function Preloader() {
                        // Нужно периодически вызывать функцию Update, которая будет обновлять процент загрузки
                        // Используем старый-добрый onEnterFrame с учетом событий AS3
                        addEventListener(Event.ENTER_FRAME, Update);
                }
 
                public function Update(e : Event):void {
 
                        var bytesLoaded:Number = stage.loaderInfo.bytesLoaded;
                        var bytesTotal:Number = stage.loaderInfo.bytesTotal;
                        var s:String = "";
                        var percent:Number = 0;
                        if (bytesTotal>0){
                                percent = Math.floor(bytesLoaded/bytesTotal*100);
                                s = percent+"% ("+
                                Math.round(bytesLoaded/1024)+"kb / "+
                                Math.round(bytesTotal/1024)+"kb)";
                        }
                        this.txt.text="Loading... "+s;
                        this.progressbar_mc.gotoAndStop(percent+1);
                        // Если полностью загрузились, то переходим на второй кадр
                        if (bytesLoaded==bytesTotal || bytesTotal==0){
                                removeEventListener(Event.ENTER_FRAME, Update);
                                (parent as MovieClip).play();
                        }
                }
 
        }
}

далле сделал :

Код AS3:

public function Update(e : Event):void {
    trace(">>> " + txt);
    trace(">>> " + stage);
    var bytesLoaded:Number = stage.loaderInfo.bytesLoaded;
    var bytesTotal:Number = stage.loaderInfo.bytesTotal;
 
    // output:
    // >>> [object TextField]
    // >>> null

получается stage не видит? тогда пчму ругается на txt?

динамический текст txt есть, все сделано по мануалу, никаких различий с оригинальным исходником нет, оригинальный исходник прекрасно работает без ошибок (


всем спасибо, все заработало, я м.....к ) небыл прописан класс для мувика preloader_mc )

Добавлено через 8 часов 10 минут
и так новая проблема с перемещением background,

1. создал новый мувик, прописал ему класс background, добавил в него картинку 2000 на 2000.

2. код:
Код AS3:

package main {
 
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        import flash.events.Event;
        import flash.geom.Rectangle;
 
 
        public class Background extends MovieClip {
 
 
                public function Background() {
                        addEventListener(MouseEvent.MOUSE_DOWN,handleMouseDown);
                        addEventListener(MouseEvent.MOUSE_UP,handleMouseUp);
                        stage.addEventListener(Event.MOUSE_LEAVE,handleMouseUp);
                }
 
                function handleMouseDown(event:Event):void{
                        var dx:Number = width-stage.stageWidth;
                        var dy:Number = height-stage.stageHeight;
//                        trace(dx);
//                        trace(dy);
                        var dragRect:Rectangle = new Rectangle(-dx,-dy,dx,dy);
                        startDrag(false, dragRect);
                }
 
                function handleMouseUp(event:Event):void{
                        stopDrag();
                }
        }
 
}

при клике в плеере картинка пчмуто заскакивает влево на половину и при трассировке dx и dy пишет 1190 и 1599, и когда начинаю перемещать картинка перемещается но она на 25% в области плеера всего остальное черный бекграунд, кароч глюк какойта, пчму так может быть?

krolser 22.12.2010 15:24

Всем привет. Начал изучать AS3 именно с этого туториала.
И так затянуло, что решил доделать игру до победного.

Более подробно про процесс создания написано тут.

Заранее предвидя обвинения в плагиате, скажу лишь одно. Я получил согласие MerlinTwii. Кроме того, я еще не слабо переписал код. Оригинального осталось 5-10%. Была также устранена очень большая утечка памяти. Пришлось посидеть с профайлером, чтобы найти в чём беда. Если в кратце, то после удаления BasicObjec со Sky он оставался в памяти. Что именно я исправил, я уже не помню. Но могу сказать спасибо за такую красивую ошибку. Сам бы я точно не стал бы разбираться с профайлером. А так жизнь заставила.

Это не рекламная мессага. Это благодарность за труд проделанный MerlinTwi.
Но если вам не лень, то можно и проголосовать 5/5 на
newgrounds.com
kongregate.com

goldlider 20.11.2011 22:05

Не могли бы помочь разобраться с переменной dragRect. Вот отрывок из класса background.
Код AS3:

function handleMouseDown(event:Event):void { 
    var dx:Number = width-stage.stageWidth;
    var dy:Number = height-stage.stageHeight;
    var dragRect:Rectangle = new Rectangle(-dx,-dy, dx,dy);
    startDrag(false, dragRect);
}

К примеру у меня фон размером 2500x1700. Размер флешки 640x480. Переменная dragRect(-1860, -1220, 1860, 1220) задает координату верхнего левого угла, ширину и высоту прямоугольника. А что означают эти цифры? Это то на сколько мы можем передвинуть флешку за одно перетаскивание?

Psycho Tiger 20.11.2011 22:54

Нет. Это квадрат, в котором разрешено перетаскивание. Нельзя утащить за этот квадрат, проще говоря.

Observer 24.10.2012 12:41

Друзья, можете подсказать. Как сделана игровая панель, чтобы она всегда была сверху, над всем игровым миром, как бы мы не перемещали карту. Мне нужно сделать точь в точь. Буду очень благодарен, если чем-нибудь поможите

b_ear 04.02.2013 17:59

Цитата:

Сообщение от MerlinTwi (Сообщение 558924)
P.S. Спустя почти год, я вижу, что в ней очень много грубых ошибок и все можно было бы сделать проще и "правильней". Но тем не менее, считаю, что статья полезна тем, кто переходит с AS2 на AS3.

А можете подсказать что именно можно было бы исправить/улучшить в вашем варианте?
Взял этот пример за основу своего пилотного проекта http://vk.com/strateg3000 , мне интересны любые подробности. Если будет удобнее, то на почту b_ear@mail.ru

Заранее спасибо!

PS: в моем варианте кнопка "Защитить планету" аналогична "Start game" вашего проекта

Добавлено через 16 часов 28 минут
Цитата:

Сообщение от Observer (Сообщение 1101087)
Друзья, можете подсказать. Как сделана игровая панель, чтобы она всегда была сверху, над всем игровым миром, как бы мы не перемещали карту. Мне нужно сделать точь в точь. Буду очень благодарен, если чем-нибудь поможите

она просто лежит сверху и все. правой кнопкой мыши нажимаешь на объекте - там будет меню, в нем выбери Упорядочить - Поместить на передний план

под ней лежит мувик игрового поля, отдельным объектом


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

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