Я делаю TDS в Flash CS4 с помощью AS3, но, похоже, проблема. Трудно объяснить, поэтому я свяжусь с флеш-файлом. Нажмите this.Создание Top Down Shooter в Adobe Flash CS4 с использованием ActionScript 3, но пули ведут себя странно
Это первое время загрузки файла для совместного использования так и для тех, кто не может или не в состоянии загрузить файл, это то, что происходит:
Игрок имеет поворот мыши, который, игрок смотрит на то, где мышь есть. На Mouse down я поставил скрипт для создания пуль. Пули создаются в порядке. Но когда пули двигаются, когда возникает проблема. Скажем, что в положении и вращении X я выстрелил 5 пуль, и они двигаются в направлении X. Теперь, если я стреляю в пулю в положение Y и вращение, созданная там пуля идет в направлении Y , но так же делают все остальные пули, которые были созданы в позиции X и направлении. Они меняют курс.
Вот код игры.
package {
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.MouseEvent;
import flash.ui.Keyboard;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Mouse;
import flash.events.TimerEvent;
public class Main extends MovieClip {
var player : Player = new Player();
//Customizable Weapon Settings
var bulletNumber:Number;//number of bullets per shot
var bulletOffset:Number;//bigger number = less acurate
var bulletSpeed:Number;//pixels per frame
var bulletMaxAge:Number;//1000 = 1 second
var reloadSpeed:Number;//1000 = 1 second
var randomNum:Number;
public static var xSpeed:Number;
public static var ySpeed:Number;
var bulletAngle:Number;
var timer:Number=0;
var flag:Boolean;
//other variables (do not edit)
var mouseClicked:Boolean=false;
var radians:Number=Math.PI/180;
public function Main() {
player.x=stage.stageWidth/2;
player.y=stage.stageHeight/2;
stage.addChild(player);
player.gotoAndStop(5);
loadWeapon("Machine Gun");
addEventListener(Event.ENTER_FRAME,on_enter_frame);
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);
}
public function onMouseDownHandler(event:MouseEvent) {
//trace("Mouse Down");
mouseClicked=true;
flag=true;
}
public function onMouseUpHandler(event:MouseEvent) {
//trace("Mouse Up");
mouseClicked=false;
flag=false;
timer=0;
}
public function loadWeapon(weaponType:String) {
switch (weaponType) {
case "Machine Gun" :
//bulletNumber = 100;
bulletOffset=10;
bulletSpeed=10;
bulletMaxAge=1000;
break;
}
}
function on_enter_frame(e:Event) {
trace("Click: "+ mouseClicked);
fireWeapon();
}
function fireWeapon() {
//check if mouse is clicked
//if true, create bullet
if (mouseClicked) {
createBullet();
player.gotoAndStop(10);
} else {
player.gotoAndStop(1);
}
}
public function createBullet() {
var bullet : Bullet2= new Bullet2();
bullet.x=player.x;
bullet.y=player.y;
if (flag) {
timer++;
if (timer==10) {
trace("lol");
//calculate random bullet offset.
randomNum = Math.random() * (bulletOffset);
//set bullet firing angle
bulletAngle = (player.rotation + randomNum) * radians;
//set bullet speed based on angle
xSpeed=Math.cos(bulletAngle)*bulletSpeed;
ySpeed=Math.sin(bulletAngle)*bulletSpeed;
//trace (bulletAngle);
stage.addChild(bullet);
bullet.addEventListener(Event.ENTER_FRAME, runForest);
//mouseClicked = false;
timer=0;
}
}
function runForest(e:Event) {
bullet.x+=xSpeed;
bullet.y+=ySpeed;
}
}
}
}
Вещи, которые я пробовал:
1) Я поставил "runForest()" Funtion вне функции "createbullet()", которые дают мне «1120: Доступ неопределенной пули собственности. " Ошибка. (Это не имеет смысла, так как я даю ему входной приемник событий кадра.)
2) Для решения этого я сделал переменную пули глобальной и объявил ее внутри функции «createbullet()», как это ... » var bullet: Bullet2; " И внутри createbullet() - "bullet = new Bullet2();" Это дает мне совершенно другой результат.
3) Я положил функцию runForest() в свой собственный файл класса. Но то же самое происходит.
Я имел в виду учебник, в котором используется AS2. This - ссылка.
Помогите мне решить это пожалуйста. Спасибо!
Я получил его для работы, выполнив это: bullet.bulletSpeedx = xSpeed; \t bullet.bulletSpeedy = ySpeed; и в классе Пули: функция runForest (е: Событие) { \t \t \t this.x + = bulletSpeedx; \t \t \t it.y + = bulletSpeedy; \t} –
Да. Я понимаю. Но я упомянул об этом, ссылаясь на сценарий AS2. Да, буду делать и дальнейшую оптимизацию. –
Спасибо большое! : D –