Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.06.2012, 11:32
fduch вне форума Посмотреть профиль Отправить личное сообщение для fduch Найти все сообщения от fduch
  № 1  
Ответить с цитированием
fduch

Регистрация: Jun 2012
Сообщений: 142
Flame как обновлять "картинку"(сцену)?

Загружаю картинку, и вывожу на экран в цикле со смещением координат, но в итоге получаю картинку в последних координатах.
ЧТо нужно? Паузу в цикл? или в принципе делаю не правильно?


Код AS3:
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;
                }
         }
}
}

Старый 11.06.2012, 12:38
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вы же и не создавали несколько картинок, откуда они возьмутся? Вы создали одну и двигаете ее в цикле.
Код AS3:
spr[i] = new symbol_kadr_1();
addChild(spr[i]);
spr[i].x = koorlog_x;	
spr[i].y = koorlog_y;
Добавлено через 6 минут
ИЛИ Вы надеялись увидеть движение картинки по диагонали?)))))
Изображение сцены не обновляется, пока не будет выполнен весь код, относящийся к текущему "кадру".
Это же естественно. Сначала надо просчитать все изменения положений и размеров объектов, а потом уже их отображать))
Поэтому сначала цикл полностью выполнится и картинке будут присвоены конечные координаты, и только после этого будет отображение.
Подписывайтесь на событие ENTER_FRAME, чтобы изменять координаты картинки перед каждым отображением.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 11.06.2012 в 13:06.
Старый 11.06.2012, 17:02
fduch вне форума Посмотреть профиль Отправить личное сообщение для fduch Найти все сообщения от fduch
  № 3  
Ответить с цитированием
fduch

Регистрация: Jun 2012
Сообщений: 142
Да, надеялся увидеть движение)
ну ок добавляем
Код AS3:
stage.addEventListener(Event.ENTER_FRAME, moveF);
            function moveF(e:Event):void 
{
//тут цикл с прорисовкой.
}
ТОлько теперь оно бесконечно зацыклено, это рас. и Прыгает не по 1пикселю а по 5-10

Добавлено через 2 минуты
Так, с прыганьем понял суть своей глупости цикл из функции убрал, все двигается плавненько и по 1пикселю. но как убрать бесконечную зацыкленность?

Добавлено через 7 минут
И в догонку: Я могу на одну сцену вывести несколько одинаковых обьектов?

Старый 11.06.2012, 17:28
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 4  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
но как убрать бесконечную зацыкленность?
Вы хотите, чтобы в определенный момент движение прекращалось? Тогда добавьте условие и если оно выполняется, то отписывайтесь от события Event.ENTER_FRAME.
Цитата:
Я могу на одну сцену вывести несколько одинаковых обьектов?
Можете. Если функционал у них будет похож или вообще одинаков, то лучше написать отдельный класс.
__________________
http://www.chessmax.ru

Старый 11.06.2012, 17:28
FlashRus вне форума Посмотреть профиль Отправить личное сообщение для FlashRus Найти все сообщения от FlashRus
  № 5  
Ответить с цитированием
FlashRus
 
Аватар для FlashRus

Регистрация: Nov 2006
Адрес: СПб
Сообщений: 921
Отправить сообщение для FlashRus с помощью ICQ Отправить сообщение для FlashRus с помощью Skype™
Код AS3:
removeEventListener(Event.ENTER_FRAME, moveF);

Старый 11.06.2012, 18:55
fduch вне форума Посмотреть профиль Отправить личное сообщение для fduch Найти все сообщения от fduch
  № 6  
Ответить с цитированием
fduch

Регистрация: Jun 2012
Сообщений: 142
Цитата:
removeEventListener(Event.ENTER_FRAME, moveF);
Добавил условие в него эту строчку, условие срабатывает мув не останавливается.

Добавлено через 2 минуты
Цитата:
Я могу на одну сцену вывести несколько одинаковых обьектов?
Можете. Если функционал у них будет похож или вообще одинаков, то лучше написать отдельный класс.
Код AS3:
         addChild(spr[1]);
         spr[1].x=koorx;
         spr[1].y=koory;
 
         addChild(spr[1]);
         spr[1].x=koorx+10;
         spr[1].y=koory+10;
Как? Если пытаться вывести один и тот же обьект с разными координатами, то выводиться только второй.

Старый 11.06.2012, 19:59
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 7  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
Добавил условие в него эту строчку, условие срабатывает мув не останавливается.
Это все из-за невнимательности. Вы подписываетесь к stage, а отписаться пытаетесь от this. Во флеше любой DisplayObjetct шлет событие Event.ENTER_FRAME. По этому нет нужды подписываться к stage, можно к this. По этому либо:
Код AS3:
stage.addEventListener(Event.ENTER_FRAME, moveF);
            function moveF(e:Event):void;
stage.removeEventListener(Event.ENTER_FRAME, moveF);
либо:
Код AS3:
this.addEventListener(Event.ENTER_FRAME, moveF);
            function moveF(e:Event):void;
this.removeEventListener(Event.ENTER_FRAME, moveF);
Цитата:
Как? Если пытаться вывести один и тот же обьект с разными координатами, то выводиться только второй.
Перечитайте пожалуйста еще раз ответ Wolsh-а.
__________________
http://www.chessmax.ru

Старый 11.06.2012, 20:14
fduch вне форума Посмотреть профиль Отправить личное сообщение для fduch Найти все сообщения от fduch
  № 8  
Ответить с цитированием
fduch

Регистрация: Jun 2012
Сообщений: 142
Цитата:
Это все из-за невнимательности. Вы подписываетесь к stage, а отписаться пытаетесь от this. Во флеше любой DisplayObjetct шлет событие Event.ENTER_FRAME. По этому нет нужды подписываться к stage, можно к this. По этому либо:
Ага, заработало(остановилось точнее), спс.
А как теперь опять запустить туже функцию? с начала.
просто добавив
Код AS3:
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-а.
да я понял, но по сути если мне надо допустим вывести на экран массив который содержит изначально одну и туже картинку...Придется в цикле во все ячейки загонять картинку?
Код AS3:
for (i = 0;  i  <  201; i++)
		{
			spr[i] = new map_1();
		}


Последний раз редактировалось fduch; 11.06.2012 в 20:25.
Старый 11.06.2012, 20:34
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 9  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Цитата:
А как теперь опять запустить туже функцию? с начала.
просто добавив
Код AS3:
stage.addEventListener(Event.ENTER_FRAME, moveF);
            function moveF(e:Event):void;
stage.removeEventListener(Event.ENTER_FRAME, moveF);
 
stage.addEventListener(Event.ENTER_FRAME, moveF);
Подписавшись, затем тут же отписавшись и опять подписавшись Вы ровным счетом ничего не делаете, тогда зачем все 3 эти лишние строчки?
Судя по Вашему коды Вы пытаетесь добиться цикличности?
Нужно просто выставить координаты картинки в начальные:
Код AS3:
spr[1].x = 0;
spr[1].y = 0;
Цитата:
Придется в цикле во все ячейки загонять картинку?
Именно. А как вы иначе хотели?
И правильней будет, если Вы заведете локальную переменную, а не будете постоянно дергать объект из массива по индексу:
Код AS3:
var d:DisplayObject = spr[1] as DisplayObject;
d.x = koorlog_x;
d.y = koorlog_y;
 
koorlog_x += 1;
koorlog_y += 1;
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 11.06.2012 в 20:38.
Старый 11.06.2012, 21:23
fduch вне форума Посмотреть профиль Отправить личное сообщение для fduch Найти все сообщения от fduch
  № 10  
Ответить с цитированием
fduch

Регистрация: Jun 2012
Сообщений: 142
Цитата:
Подписавшись, затем тут же отписавшись и опять подписавшись Вы ровным счетом ничего не делаете, тогда зачем все 3 эти лишние строчки?
Судя по Вашему коды Вы пытаетесь добиться цикличности?
Нужно просто выставить координаты картинки в начальные:
Не, я пока просто прикидываю, что и как) Смогу я быстро разобраться или нет.
На данно этапе я хочу написать простенькую игру две биты на поле сверху и снизу, и по полю летает шарик, биты его соответственно отбивают..
Дык вот когда бита НЕ отбивает, и шар пролдетает, надо остановить мув, выдать инфу об очках, и выставив шар в центр продолжить!
Все зделано, за исключением тока, что либо нет паузы, между вылетом шара и началом новой партии, либо шар останавливается и усе....


Вот вопрос
Код AS3:
var textA:TextField = new TextField();
	textA.text = "AI: " + b1_shone + "  Игрок: " + b2_shone;
        textA.x = 90;
        textA.y = 90;
	addChild(textA);
Вот под этот текст создается окно в 100 на 100 пикселов, хотя по факту он занимает 20 на 50
Как задать это "окно"? и можно ли текст накладывать типа по маске, чтобы не затирать то что под ним?

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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