Показать сообщение отдельно
Старый 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();	
		}
	}
}