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

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

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

Регистрация: Jan 2010
Сообщений: 187
Question Движение звёздного неба.

Сейчас я делаю так:
Сначала создаю отдельный пустой мувик, который заполняю звёздами.

Код AS3:
addChild(particle1);
for (var p:uint = 0; p < 50; p++) {
	var particle = new Particle();
	particle1.addChild(particle);
	var px:int = 1 + (Math.random() * 640)
	var py:int = 1 + (Math.random() * 480)
	particle.x = px;
	particle.y = py;
}
Далее, начинаю двигать этот мувик справа налево в каждом кадре.

Код AS3:
particle1.x -= 1;
А вот дальше у меня затык.
Я хочу, чтобы звёзды, которые вышли за предел экрана слева - удалялись, а справа появлялись новые.
Начал делать так:

Код AS3:
if (particle1.x < 0) {
	for (var pp:uint = 0; pp < particle1.numChildren; pp++) {
		if (particle1.getChildAt(pp).x < 0) { particle1.removeChild(pp); }
	}
}
Но сразу же выдаётся ошибка.
Подскажите, как правильно удалить чаилда?

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Ошибка выдается, потому что pp при удалении становится больше numChildren.

Лучше не удаляйте, а меняйте координаты. Ну или идите в обратном направлении.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 09.01.2012, 23:48
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 3  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Отличная мысль!!
Попробовал так.
Код AS3:
if (particle1.x < 0) {
	for (var pp:uint = 0; pp < particle1.numChildren; pp++) {
if (particle1.getChildAt(pp).x < 0) { particle1.getChildAt(pp).x = 640; trace("1"); }
}
}
trace почему-то не срабатывает ):

Старый 09.01.2012, 23:50
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Из-за форматирования :о)

Трейс тока в дебаге.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 10.01.2012, 15:26
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 5  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Цитата:
if (particle1.x < 0) {
for (var pp:uint = 0; pp < particle1.numChildren; pp++) {
if (particle1.getChildAt(pp).x < 0) { particle1.removeChild(pp); }
}
}
pp типа uint а в removeChild нужно передавать DisplayObject, нужно было использовать removeChildAt.
А вообще код перемещения снежинок проще вынести в класс снежинок, в функцию update к примеру, проще будет контролировать.
Код AS3:
public class DynamicParticle extends Particle
{
    public function setRandomPos():void
    {
        this.x = 1 + (Math.random() * 640);
	this.y = 1 + (Math.random() * 480);
    }
    public function update():void
    {
      this.x -= 1;
      if (this.x < 0)
        this.x = 640;
    }
}
Код AS3:
public class ParticleContainer extends Sprite
{
    private var _particles:Vector.<Sprite> = new Vector.<Sprite>();
    public function createSky():void
    {
        for (var p:uint = 0; p < 50; p++) 
        {
            var particle = new DynamicParticle();
	    particle.setRandomPos();
            addChild(particle);
            _particles.push(particle);
        }
    }
    public function update():void
    {
         for (var pp:uint = 0; pp < _particles.length; pp++) 
         {
             _particles[pp].update();             
         }
    }
}
Код AS3:
var sky:ParticleContainer = new ParticleContainer();
sky.createSky();
addChild(sky);
и на каждом кадре
Код AS3:
sky.update()


Последний раз редактировалось Stitch512; 10.01.2012 в 16:44.
Старый 10.01.2012, 15:31
In8Finity вне форума Посмотреть профиль Отправить личное сообщение для In8Finity Найти все сообщения от In8Finity
  № 6  
Ответить с цитированием
In8Finity

Регистрация: Jan 2010
Сообщений: 187
Спасибо. Буду пробовать.

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

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

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


 


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


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