PDA

Просмотр полной версии : Создание выстрела


startup
07.01.2012, 22:57
Добрый вечер.
Пытаюсь разобраться с Flash и ActionScript 3 в частности, на примере простой игрушки.
Есть шарик, которым управляю стрелками на клавиатуре, необходимо научить его стрелять.

Имеется класс:

package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;

public class Hero extends MovieClip
{

var speedX:Number = 0;
var speedY:Number = 0;
var power:Number = 1;
var friction:Number = 0.95;

var left:Boolean = false;
var up:Boolean = false;
var right:Boolean = false;
var down:Boolean = false;

public function Hero(){
stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, KeyUp);
stage.addEventListener(Event.ENTER_FRAME, HeroMotion);
stage.addEventListener(MouseEvent.CLICK, Bullet);
}

public function KeyDown(e:KeyboardEvent):void
{
switch(e.keyCode){
case 37: left = true; break;
case 38: up = true; break;
case 39: right = true; break;
case 40: down = true; break;
}
}

public function KeyUp(e:KeyboardEvent):void
{
switch(e.keyCode){
case 37: left = false; break;
case 38: up = false; break;
case 39: right = false; break;
case 40: down = false; break;
}
}

public function HeroMotion(e:Event):void
{
if(left == true){speedX -= power;}
if(right == true){speedX += power;}
if(up == true){speedY -= power;}
if(down == true){speedY += power;}
speedY *= friction;
speedX *= friction;
this.x += speedX;
this.y += speedY;
}
public function Bullet(e:Event):void
{
// Здесь должен быть выстрел
}
}
}

По щелчку мышки выполняется функция Bullet(), которая должна реализовать выстрел.
Подскажите, пожалуйста, как это сделать? Можно просто движение пули по оси X.

Vektor
08.01.2012, 02:15
Создать пулю(MovieClip).
public function Bullet(e:Event):void
{
пуля.addEventListener(Event.ENTER_FRAME,fEnterFrame)
пуля.x =this.x;
пуля.y=this.y
}
public function fEnterFrame(e:Event):void
{
пуля.x += 10;
//Если, пуля попала в цель или вышла за экран.
пуля.removeEventListener(Event.ENTER_FRAME,fEnterFrame)
}
Приблизительно так.

startup
08.01.2012, 03:01
Спасибо, но у меня есть загвоздка непосредственно с доступом из класса.

1. Нарисовал пулю
2. Выделил, нажал F8, ввел название mcBullet

Что сделать дальше, как сделать этот MovieClip доступным из класса Hero?

Flashrunner
08.01.2012, 03:17
var bullet:MovieClip = new mcBullet();

startup
08.01.2012, 03:31
Flashrunner, спасибо. Вставил, получил следующее:

public function Bullet(e:Event):void
{
var bullet:MovieClip = new mcBullet();
bullet.addEventListener(Event.ENTER_FRAME,BulletMovie);
bullet.x = this.x;
bullet.y = this.y;
}
public function BulletMovie(e:Event):void
{
bullet.x += 10;
}

Но, ничего не происходит. Пуля не летит.

Vektor
08.01.2012, 03:53
public function Bullet(e:Event):void
{
var bullet:mcBullet = new mcBullet();

addChild(bullet);

bullet.addEventListener(Event.ENTER_FRAME,BulletMovie);
bullet.x = this.x;
bullet.y = this.y;
}
public function BulletMovie(e:Event):void
{
bullet.x += 10;
}

startup
08.01.2012, 04:03
Vektor, спасибо большое, теперь полетело, правда немного изменил код.
Вынес переменную за пределы функции, а

addChild(bullet);

заменил на

stage.addChild(bullet);

ProxyGreen
08.01.2012, 04:58
Почему бы просто не сделать массив пуль, и по таймеру обходя этот массив сдвигать все пули. В любом случае, потом понадобиться проверять пули на столкновение с другими объектами. Или например поставить игру на паузу.