Просмотр полной версии : как обновлять "картинку"(сцену)?
Загружаю картинку, и вывожу на экран в цикле со смещением координат, но в итоге получаю картинку в последних координатах.
ЧТо нужно? Паузу в цикл? или в принципе делаю не правильно?
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.display.DisplayObject;
import flash.events.Event;
public class Main extends Sprite
{
public var spr:Array=new Array();
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
public function init(e:Event = null):void
{
var i:int;
[Embed(source="logo.png")] var symbol_logo:Class;
[Embed(source="sprit1.png")] var symbol_kadr_1:Class;
var logo:DisplayObject=new symbol_logo();
spr[1] = new symbol_kadr_1();
var koorlog_x:int = 0, koorlog_y:int = 0;
for (i = 0; i < 20; i++)
{
addChild(spr[1]);
spr[1].x = koorlog_x;
spr[1].y = koorlog_y;
koorlog_x += 1;
koorlog_y += 1;
}
}
}
}
Вы же и не создавали несколько картинок, откуда они возьмутся? Вы создали одну и двигаете ее в цикле.
spr[i] = new symbol_kadr_1();
addChild(spr[i]);
spr[i].x = koorlog_x;
spr[i].y = koorlog_y;
Добавлено через 6 минут
ИЛИ Вы надеялись увидеть движение картинки по диагонали?)))))
Изображение сцены не обновляется, пока не будет выполнен весь код, относящийся к текущему "кадру".
Это же естественно. Сначала надо просчитать все изменения положений и размеров объектов, а потом уже их отображать))
Поэтому сначала цикл полностью выполнится и картинке будут присвоены конечные координаты, и только после этого будет отображение.
Подписывайтесь на событие ENTER_FRAME, чтобы изменять координаты картинки перед каждым отображением.
Да, надеялся увидеть движение)
ну ок добавляем
stage.addEventListener(Event.ENTER_FRAME, moveF);
function moveF(e:Event):void
{
//тут цикл с прорисовкой.
}
ТОлько теперь оно бесконечно зацыклено, это рас. и Прыгает не по 1пикселю а по 5-10
Добавлено через 2 минуты
Так, с прыганьем понял суть своей глупости цикл из функции убрал, все двигается плавненько и по 1пикселю. но как убрать бесконечную зацыкленность?
Добавлено через 7 минут
И в догонку: Я могу на одну сцену вывести несколько одинаковых обьектов?
но как убрать бесконечную зацыкленность?Вы хотите, чтобы в определенный момент движение прекращалось? Тогда добавьте условие и если оно выполняется, то отписывайтесь от события Event.ENTER_FRAME.
Я могу на одну сцену вывести несколько одинаковых обьектов?
Можете. Если функционал у них будет похож или вообще одинаков, то лучше написать отдельный класс.
FlashRus
11.06.2012, 17:28
removeEventListener(Event.ENTER_FRAME, moveF);
removeEventListener(Event.ENTER_FRAME, moveF);
Добавил условие в него эту строчку, условие срабатывает мув не останавливается.
Добавлено через 2 минуты
Я могу на одну сцену вывести несколько одинаковых обьектов?
Можете. Если функционал у них будет похож или вообще одинаков, то лучше написать отдельный класс.
addChild(spr[1]);
spr[1].x=koorx;
spr[1].y=koory;
addChild(spr[1]);
spr[1].x=koorx+10;
spr[1].y=koory+10;
Как? Если пытаться вывести один и тот же обьект с разными координатами, то выводиться только второй.
Добавил условие в него эту строчку, условие срабатывает мув не останавливается.
Это все из-за невнимательности. Вы подписываетесь к stage, а отписаться пытаетесь от this. Во флеше любой DisplayObjetct шлет событие Event.ENTER_FRAME. По этому нет нужды подписываться к stage, можно к this. По этому либо:
stage.addEventListener(Event.ENTER_FRAME, moveF);
function moveF(e:Event):void;
stage.removeEventListener(Event.ENTER_FRAME, moveF);
либо:
this.addEventListener(Event.ENTER_FRAME, moveF);
function moveF(e:Event):void;
this.removeEventListener(Event.ENTER_FRAME, moveF);
Как? Если пытаться вывести один и тот же обьект с разными координатами, то выводиться только второй.Перечитайте пожалуйста еще раз ответ Wolsh-а.
Это все из-за невнимательности. Вы подписываетесь к stage, а отписаться пытаетесь от this. Во флеше любой DisplayObjetct шлет событие Event.ENTER_FRAME. По этому нет нужды подписываться к stage, можно к this. По этому либо:
Ага, заработало(остановилось точнее), спс.
А как теперь опять запустить туже функцию? с начала.
просто добавив
stage.addEventListener(Event.ENTER_FRAME, moveF);
function moveF(e:Event):void;
stage.removeEventListener(Event.ENTER_FRAME, moveF);
stage.addEventListener(Event.ENTER_FRAME, moveF);
не получается
Добавлено через 8 минут
Перечитайте пожалуйста еще раз ответ Wolsh-а.
да я понял, но по сути если мне надо допустим вывести на экран массив который содержит изначально одну и туже картинку...Придется в цикле во все ячейки загонять картинку?
for (i = 0; i < 201; i++)
{
spr[i] = new map_1();
}
А как теперь опять запустить туже функцию? с начала.
просто добавивstage.addEventListener(Event.ENTER_FRAME, moveF);
function moveF(e:Event):void;
stage.removeEventListener(Event.ENTER_FRAME, moveF);
stage.addEventListener(Event.ENTER_FRAME, moveF);
Подписавшись, затем тут же отписавшись и опять подписавшись Вы ровным счетом ничего не делаете, тогда зачем все 3 эти лишние строчки?
Судя по Вашему коды Вы пытаетесь добиться цикличности?
Нужно просто выставить координаты картинки в начальные:
spr[1].x = 0;
spr[1].y = 0;
Придется в цикле во все ячейки загонять картинку?
Именно. А как вы иначе хотели?
И правильней будет, если Вы заведете локальную переменную, а не будете постоянно дергать объект из массива по индексу:
var d:DisplayObject = spr[1] as DisplayObject;
d.x = koorlog_x;
d.y = koorlog_y;
koorlog_x += 1;
koorlog_y += 1;
Подписавшись, затем тут же отписавшись и опять подписавшись Вы ровным счетом ничего не делаете, тогда зачем все 3 эти лишние строчки?
Судя по Вашему коды Вы пытаетесь добиться цикличности?
Нужно просто выставить координаты картинки в начальные:
Не, я пока просто прикидываю, что и как) Смогу я быстро разобраться или нет.
На данно этапе я хочу написать простенькую игру две биты на поле сверху и снизу, и по полю летает шарик, биты его соответственно отбивают..
Дык вот когда бита НЕ отбивает, и шар пролдетает, надо остановить мув, выдать инфу об очках, и выставив шар в центр продолжить!
Все зделано, за исключением тока, что либо нет паузы, между вылетом шара и началом новой партии, либо шар останавливается и усе....
Вот вопрос
var textA:TextField = new TextField();
textA.text = "AI: " + b1_shone + " Игрок: " + b2_shone;
textA.x = 90;
textA.y = 90;
addChild(textA);
Вот под этот текст создается окно в 100 на 100 пикселов, хотя по факту он занимает 20 на 50
Как задать это "окно"? и можно ли текст накладывать типа по маске, чтобы не затирать то что под ним?
Паузу можно организовать либо с помощью класса Timer, либо просто подсчетом кол-ва фреймов.
По второму вопросу ничего не понял.
Паузу можно организовать либо с помощью класса Timer, либо просто подсчетом кол-ва фреймов.
По второму вопросу ничего не понял.
При выводе текста на экран, под него вероятно резервируется какая то область, 100на 100 пикселей.
как эту зону редактировать?
И в догонку, когда обновляем текст, то он накладывается на старый, и получается абракадабра, как этого избежать?
При выводе текста на экран, под него вероятно резервируется какая то область, 100на 100 пикселей.
как эту зону редактировать?
Ну самому выставить width/height или
tf.autoSize = TextFieldAutoSize.LEFT;
И в догонку, когда обновляем текст, то он накладывается на старый, и получается абракадабра, как этого избежать?
Опять невнимательность. Не создавайте каждый раз новый TextField, а сохраните на него ссылку и обновляйте старый.
Опять невнимательность. Не создавайте каждый раз новый TextField, а сохраните на него ссылку и обновляйте старый. Угу, разобрался и зона в 100 на 100 пропала сама собой)
Теперь вопрос, по опросу клавы.
мне бы.. запустить остановленый мув, по "any key"
По моему мнению это должно работать так:
function reportKeyDown(event:KeyboardEvent):void
{ i = event.keyCode;}
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
if (i != 0) {stage.addEventListener(Event.ENTER_FRAME, moveF);
Но есесно не работает.
Добавлено через 1 минуту
Надо неверное как то зациклить проверку на "не 0" ?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.