Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Циклы и спрайты (http://www.flasher.ru/forum/showthread.php?t=197408)

xrapa 07.04.2013 00:15

Циклы и спрайты
 
Создаю циклом спрайты в них добавляю по 2 битмапа. Дальше у меня есть таймер который должен делать видимым и не видимым один а потом другой битмап(то есть эт анимация такая). Проблема в том, что это происходит только с одним спрайтом. Как быть?

illuzor 07.04.2013 00:23

Если хотите, чтоб вам помогли, покажите код

Александр Мостовой 07.04.2013 06:11

Цитата:

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

xrapa 07.04.2013 12:27

Код AS3:

 
public        var kom_zt:Timer;
public        var komZm:Bitmap;
public        var komZm1:Bitmap;
public        var komZmSprite:Sprite;
public        var komZmB:Body;
 
//...//
 
for(var k:int=0; k<5; k++){
 
        komZm=new Bitmap();       
 
        komZm.bitmapData = new BitmapData(Atlas.atlasXML.sprite[25].@w, Atlas.atlasXML.sprite[25].@h);
        komZm.bitmapData.copyPixels(Preloader.ATLAS,
                new Rectangle(Atlas.atlasXML.sprite[25].@x, Atlas.atlasXML.sprite[25].@y, Atlas.atlasXML.sprite[25].@w, Atlas.atlasXML.sprite[25].@h),
                new Point(0, 0));
        komZm.smoothing=true;
 
        komZm1=new Bitmap();
        komZm1.bitmapData = new BitmapData(Atlas.atlasXML.sprite[26].@w , Atlas.atlasXML.sprite[26].@h);
        komZm1.bitmapData.copyPixels(Preloader.ATLAS,
                new Rectangle(Atlas.atlasXML.sprite[26].@x, Atlas.atlasXML.sprite[26].@y, Atlas.atlasXML.sprite[26].@w, Atlas.atlasXML.sprite[26].@h),
                new Point(0, 0));
        komZm1.smoothing=true;
 
        komZmSprite=new Sprite;
 
        komZmSprite.addChild(komZm);
        komZmSprite.addChild(komZm1);
 
          komZm.x -= komZm.width/2;
        komZm.y -= komZm.height/2;
        komZm1.x -= komZm1.width/2;
        komZm1.y -= komZm1.height/2;
 
Mir.addChild(komZmSprite);       
 
                      komZmSprite.width=(stage.stageWidth*93)/768;
                komZmSprite.scaleY=komZmSprite.scaleX;
 
                komZmB=new Body(BodyType.DYNAMIC, new Vec2(0, 0));
                komZmB.isBullet=true;
                komZmB.shapes.add(new Polygon(Polygon.box(komZmSprite.width, komZmSprite.height), Material.steel()));
                komZmB.position.setxy(stage.stageWidth/5+((stage.stageWidth*3)/5)*Math.random(), stage.stageHeight/10);
                komZmB.allowRotation=false;
                komZmB.space=space;               
                komZmB.userData.graphic=komZmSprite;
                komZmB.velocity.setxy(stage.stageWidth/100, stage.stageHeight/100);
 
//после того как выполнилась функция с циклам запускаю таймер//
 
private function anim():void{
kom_zt = new Timer(50);
kom_zt.start();
kom_zt.addEventListener(TimerEvent.TIMER, kom_ztf);
};
 
                private        function kom_ztf (e:TimerEvent):void{
                        if((kom_zt.currentCount & 1) == 0) {       
 
                                komZm1.visible=true;komZm.visible=false;
                        } else{       
 
                                komZm.visible=true;komZm1.visible=false;}


Александр Мостовой 07.04.2013 13:25

Код AS3:

(kom_zt.currentCount & 1) == 0)

Это подсчет четного числа?
Такие вещи лучше выносить в промежуточные переменные
Код AS3:

var isEven:Boolean = (kom_zt.currentCount & 1) == 0;

Ну возможно таймер никогда не принимает четные значения
Возможно один из спрайтов просто белый, они отрисовуются без анимаций?

Упростите в разбейте код на отдельные куски и упростите на ключевых моментов постепенно усложняя или пройдетесь по дебагу. Разобратьсся взуально втаких вещах бесперспективное занятие.

xrapa 07.04.2013 13:43

Таймер работает хорошо, для одного спрайта. ПРОВЕРЕН. Да и как таймер может не принимать четные значения!

Добавлено через 5 часов 14 минут
Ну кто знает?

GBee 08.04.2013 00:16

Попробуйте большие значения - 50 мсек это как-то быстро. Может мерцание монитора совпало с частотой смены :о)

Оффтоп - Ваш стиль очень уж знаком.

Добавлено через 3 минуты
Хотя ошибка очевидна. Дайте угадаю, работает только последний спрайт. Потому что ссылки остались на последние созданные объекты.

xrapa 08.04.2013 18:34

GBee, да вы правы. Но как это исправить?

GBee 08.04.2013 22:28

Да исправить легко. Вам надо изучить циклы и массивы. Да и переменные как-то лучше называть.


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

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