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

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

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

Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
ну на следующей итерации ENTER_FRAME bullets.length заново рассчитается, и та,обделенная апдейтом пулька все же получит свое внимание и свой апдейт и полетит дальше, а у меня они намертво останавливаются

Старый 14.02.2014, 16:42
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 12  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
Цитата:
ну на следующей итерации ENTER_FRAME bullets.length заново рассчитается, и та,обделенная апдейтом пулька все же получит свое внимание
Так, да... Тогда код показывайте.

Добавлено через 46 секунд
Но это все равно не правильно, не должен цикл хоть и на кадр, но неправильно работать.

Старый 14.02.2014, 16:44
Vansimar вне форума Посмотреть профиль Отправить личное сообщение для Vansimar Найти все сообщения от Vansimar
  № 13  
Ответить с цитированием
Vansimar
 
Аватар для Vansimar

Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
Ну вот код пульки
Код AS3:
package objects.weapons
{
	import animation.AntActor;
 
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import flash.globalization.NumberParseResult;
	import flash.text.TextField;
 
	import gameClass.Game;
 
	import objects.Entity;
	import objects.Hero;
	import objects.enemies.Enemy;
	import objects.enemies.Tnt;
	import objects.shop.Box;
	import objects.shop.Coinsbox;
 
	import screens.InGame;
 
	import utils.ageVector;
 
	public class Bullet extends Entity
	{
		private var vectorEnd: ageVector;
		private var vectorStart: ageVector;
		private var angle:Number;
		private var angle2:Number;
 
 
		private var bulletBang:AntActor;
		private var bullet:AntActor;
		private var speed: int = 10;
		private var power:int = 5;
		private var text:TextField;
		private var i:int = 0;
 
		public function Bullet(vec: ageVector,point:Point,_speed:int,_power:int)
		{
			super();
			vectorEnd = new ageVector();
			vectorEnd.x = vec.x;
			var k:int;
 
			if(InGame.entities[0] as Hero){
				var percent:int = (InGame.entities[0] as Hero).getStamina();
				var value: int =20- 20* (percent/100);
				k = randRange(vec.y-value,vec.y+value);
				vectorEnd.y = k;
			}else{
				k = randRange(vec.y,vec.y);
				vectorEnd.y = k;
			}
			speed = _speed;
			power = _power;
			angle = Math.atan2(vectorEnd.x-point.x,vectorEnd.y-point.y);
 
			angle2 = Math.atan2(vectorEnd.y-point.y,vectorEnd.x-point.x);
 
			vectorStart = new ageVector(this.x, this.y);
			this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
		}
 
		private function onAddedToStage(event:Event):void
		{
			this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
			//this.addEventListener(Event.ENTER_FRAME, update);
			createAnimation();
			createHitBox(2, 2, 5,5);
			isBullet = true;
 
 
			bullet.rotation = angle2;
 
		}		
 
		public override function update():void
		{
			//text.text = String(i++);
 
			if(x>720 || x<0 || y>550 ||y<0){
				this.kill();
				setIndex();
 
			}	
			this.x += Math.sin(angle) * speed;
			this.y += Math.cos(angle) * speed; 
			checkCollision();
			checkCollisionWithBox();
 
		}
		private function checkCollisionWithBox():void{
			for(var i:int= 1;i< InGame.entities.length;i++){
				if(InGame.entities[i] && InGame.entities[i].isBox){
					if(InGame.entities[i].isDead ==false ){
						var paddleRect:Rectangle = this.returnHitBox().getBounds( this );
						var enemy:Entity;
						if((InGame.entities[i] as Coinsbox))
							enemy = (InGame.entities[i] as Coinsbox);
						if((InGame.entities[i] as Box))
							enemy = (InGame.entities[i] as Box);
						var tempSprite:Sprite = enemy.returnHitBox();
						var ballRect:Rectangle = tempSprite.getBounds( this );
						var isColliding:Boolean = paddleRect.intersects( ballRect );
						if(isColliding && !isDead){
							bulletBang.visible = true;
							bulletBang.play();
							isDead = true;
							bullet.visible = false;
 
							speed = 0;
							InGame.entities[i].getDamage(power);
							break;
						}
					}
				}
			}
		}
 
		private function checkCollision():void
		{
			for(var i:int= 1;i< InGame.entities.length;i++){
				if(InGame.entities[i] && InGame.entities[i].isEnemy){
					if(InGame.entities[i].isDead ==false ){
						var paddleRect:Rectangle = this.returnHitBox().getBounds( this );
						var enemy:Entity;
						if((InGame.entities[i] as Enemy) != null)
							enemy = (InGame.entities[i] as Enemy);
						else {
							enemy = (InGame.entities[i] as Tnt);
						}
						var tempSprite:Sprite = enemy.returnHitBox();
						var ballRect:Rectangle = tempSprite.getBounds( this );
						var isColliding:Boolean = paddleRect.intersects( ballRect );
 
						if(isColliding && !isDead){
 
							    bulletBang.visible = true;
								bulletBang.play();
								isDead = true;
								bullet.visible = false;
 
								speed = 0;
								InGame.entities[i].getDamage(power);
								break;
						}
					}
				}
			} 
		}
 
		private function createAnimation():void
		{
 
			bullet = new AntActor();
			bullet.addAnimFromCache("bullet"); // Добавляем анимацию
			bullet.stop();
			bullet.animSpeed =0.5 // Скорость анимаци
			addChild(bullet);
 
 
			bulletBang = new AntActor();
			bulletBang.addAnimFromCache("bullet_bang"); // Добавляем анимацию
			bulletBang.repeat = false;
			bulletBang.addEventListener(Event.COMPLETE, endShootCallback);
			bulletBang.stop();
			bulletBang.visible= false;
			this.addChild(bulletBang);
 
			text = new TextField();
			addChild(text);
 
		}
 
		private function setIndex():void{
			InGame.bullets.splice(InGame.bullets.indexOf(this), 1);
		}
 
		public function endShootCallback(e:Event):void
		{
			this.visible = false;
			bulletBang.stop();
 
			this.kill();
			setIndex();	
		}
	}
}

Старый 14.02.2014, 16:57
Akopalipsis вне форума Посмотреть профиль Найти все сообщения от Akopalipsis
  № 14  
Ответить с цитированием
Akopalipsis
Banned
[+4 24.02.14]
[+4 07.11.13]
[+ 13.03.14]

Регистрация: Mar 2013
Сообщений: 1,864
А Вы повторно пули используете? А то может просто анимация заканчивается?

Старый 14.02.2014, 16:59
Vansimar вне форума Посмотреть профиль Отправить личное сообщение для Vansimar Найти все сообщения от Vansimar
  № 15  
Ответить с цитированием
Vansimar
 
Аватар для Vansimar

Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
нет, постоянно новые

Добавлено через 30 секунд
Да и все равно, они должны дальше лететь

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
this.kill()
В this нет никакого kill(). Имелось ввиду super.kill()? Код покажите.
__________________
Reality.getBounds(this);

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

Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
Код AS3:
public function kill():void{
 
			this.visible = false;
			if(parent){
				parent.removeChild(this);
			}
		}
Добавлено через 1 минуту
Этот метод в родительском классе

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

Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
Вот к примеру эти пульки дальше не летят
Миниатюры
Нажмите на изображение для увеличения
Название: Untitled.png
Просмотров: 47
Размер:	295.7 Кб
ID:	30489  

Старый 14.02.2014, 22:00
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 19  
Ответить с цитированием
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
если дело в переборке массива, то я использую такую конструкцию
Код AS3:
 var i:int = bullets.length;
while(i--)
{
}

Старый 15.02.2014, 16:22
Vansimar вне форума Посмотреть профиль Отправить личное сообщение для Vansimar Найти все сообщения от Vansimar
  № 20  
Ответить с цитированием
Vansimar
 
Аватар для Vansimar

Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
не помогло(

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

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

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


 


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


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