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

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

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

Регистрация: Oct 2006
Сообщений: 26
По умолчанию Помогите разобраться с пересечением объектов..

Столкнулся с очередной головоломкой!

Наглядный пример - пули должны разбиваться о блок, что и происходит, пока пули летят через фрейм или реже (первая часть примера). Но стоит запустить их в каждом фрейме (вторая часть) - как нате вам.. Видно под таким напором блок устоять не может и поддается

Ширина пули больше её шага. Плюс ширина блока. Перескакивание невозможно! И если fps маленький - отлично видно, что пули ПЕРЕСЕКАЮТ блок.

Основной код:
Код AS3:
var aBlt:Array = [];    // массив для хранения пуль
var j:Number = 0;
var fMode:Boolean=true;
mBlck.x = 500;
 
 
stage.addEventListener(Event.ENTER_FRAME, fn1);
 
stop();
 
function fn1(event:Event):void{
 
  mBlck.x-=1;       // двигаем блок навстречу пулям
  if(mBlck.x<50){
    mBlck.x=500;
    fMode=!fMode;    // переключаем режимы 'стрельбы'
  }
 
  if(fMode){      // режимы 'стрельбы'
    if(j++>0){      // добавляем пулю через фрейм
      j=0;
      var mc:MovieClip=new mBullet();
      mc.x = 0;
      mc.y = 100 + Math.random() * 30;
      this.addChild(mc);
      aBlt.push(mc);
    }
  } else {
    // ..тоже самое! Но каждый фрейм.
    mc = new mBullet();
    mc.x = 0;
    mc.y=300 - Math.random() * 30;
    this.addChild(mc);
    aBlt.push(mc);
  }
 
  // проверяем на пересечение с блоком
  for each(var m:MovieClip in aBlt){
    if(mBlck.hitTestObject(m)){
      m.fnHit();                // сообщаем пуле о попадании
      aBlt.splice(aBlt.indexOf(m), 1);      // удаляем из списка
      this.removeChild(m);
    }
  }
}
 
 
 
function fnDel(zzz:DisplayObject):void {
  this.removeChild(zzz);
  zzz = null;
}
Код пули:
Код AS3:
var m:MovieClip=MovieClip(this.parent);
var nStp:Number=10;		// шаг для пули
 
 
this.addEventListener(Event.ENTER_FRAME, fn1);
 
 
function fn1(event:Event):void{
	if(x>550){			// если вылетели за этот предел..
		this.removeEventListener(Event.ENTER_FRAME, fn1);	// ..удаляем обработчик..
		m.fnDel(this);										// ..и себя
		return;
	}
	x+=nStp;				// двигаемся на этот шаг
}
 
function fnHit():void{
	this.removeEventListener(Event.ENTER_FRAME, fn1);
}
Вложения
Тип файла: rar Source.rar (8.2 Кб, 47 просмотров)

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

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

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


 


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


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