|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
ну на следующей итерации ENTER_FRAME bullets.length заново рассчитается, и та,обделенная апдейтом пулька все же получит свое внимание и свой апдейт и полетит дальше, а у меня они намертво останавливаются
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
Добавлено через 46 секунд Но это все равно не правильно, не должен цикл хоть и на кадр, но неправильно работать. |
|
|||||
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
Ну вот код пульки
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(); } } } |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
А Вы повторно пули используете? А то может просто анимация заканчивается?
|
|
|||||
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
нет, постоянно новые
Добавлено через 30 секунд Да и все равно, они должны дальше лететь |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
public function kill():void{ this.visible = false; if(parent){ parent.removeChild(this); } } Этот метод в родительском классе |
|
|||||
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
Вот к примеру эти пульки дальше не летят
|
|
|||||
если дело в переборке массива, то я использую такую конструкцию
|
|
|||||
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
не помогло(
|
Часовой пояс GMT +4, время: 06:02. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|