저는 AS3을 처음 사용하고 간단한 플래시 게임을 만들려고합니다. 내 문제는 클래스 외부의 특정 배열에 액세스하는 것입니다. 일부 변수 및 기능에 액세스하는 데 성공했지만이 기능에 상당히 집착하고 있습니다.AS3 클래스 및 변수 액세스
플래시 파일에 연결된 주 클래스 인 게임, 배경 요소와 적을 생성하는 Level1, 마지막으로 적 클래스가 있습니다.
Game 클래스는 적 (Enemy 클래스 포함)을 스폰하고 레벨을 클래스로 인스턴스화합니다. 적을 공격하면 Enemy 클래스의 메서드가 표시 목록에서 해당 메서드를 제거한 다음 실패하고 throw하는 Level1 클래스에있는 배열에서 해당 메서드를 제거하려고 시도합니다.
1119 : 아마도 정의되지 않은 속성에 대한 액세스 정적 유형 클래스를 사용하는 참조를 통해 level1.
또 다른 문제는 총알이 화면 중간에서 멈추는 때입니다.이 버그를 추적 할 수도 없었습니다.
어쨌든, 이것은 내 첫 번째 코드 관련 게시물이며, 너무 지저분한 경우 말해 주시면 더 쉽게 읽을 수 있도록 노력하겠습니다. 어떤 inconveniance 죄송 과 당신의 도움이 -Yaniv
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.text.*;
import flash.geom.Point;
public class Game extends MovieClip
{
public var player:Player;
public var level1:Level1;
public var bullet:Bullet;
private var bullets_arr:Array;
var fire_on : Boolean;
var fire_counter : int;
public function Game()
{
level1=new Level1(this.stage);
player = new Player ;
addChild(player);
player.y = 600;
bullets_arr = [];
addEventListener(Event.ENTER_FRAME,Main);
stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);
stage.addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);
}
function mouseDownHandler($e:MouseEvent):void
{
fire_on = true;
}
function mouseUpHandler($e:MouseEvent):void
{
fire_on = false;
fire_counter = 0;
}
function fire():void
{
bullet = new Bullet ;
addChild(bullet);
bullet.x = player.x;
bullet.y = player.y - 32;
bullets_arr.push(bullet);
}
public function Main(e: Event):void
{
player.x = mouseX;
if (bullets_arr)
{
for (var m:int = 0; m < bullets_arr.length; m++)
{
bullets_arr[m].y -= 20;
if(level1.enemies_arr)
{
for (var n:int = 0; n < level1.enemies_arr.length; n++)
{
if (bullets_arr[m])
{
if (level1.enemies_arr[n])
{
if (level1.enemies_arr[n].hitTestObject(bullets_arr[m]))
{
if(bullets_arr[m].parent)
{
bullets_arr[m].parent.removeChild(bullets_arr[m]);
bullets_arr.splice(bullets_arr[m],1);
level1.enemies_arr[n].DoDamage(10);
}
}
}
}
}
}
}
}
if(fire_on)
{
fire_counter++;
if(fire_counter == 01)
{
fire();
}
else if(fire_counter >5)
{
fire_counter =0;
}
}
}
}
}
package {
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
public class Level1 extends MovieClip{
var i:int;
var j:int;
var frame :int;
public var enemy:Enemy;
public var enemies_arr:Array;
public function Level1(target:Stage)
{
frame = 0;
enemies_arr = [];
for (var i:int = 0; i < 3; i++)
{
for (var j:int = 0; j < 3; j++)
{
enemy = new Enemy;
enemy.x = j*100 + 260;
enemy.y = i*40 - 150;
target.addChild(enemy);
enemies_arr.push(enemy);
}
}
}
}
}
package
{
import flash.display.MovieClip;
public class Enemy extends MovieClip
{
var Health : int;
var splash:Splash;
function Enemy()
{
Health =30;
}
public function DoDamage(Damage:int)
{
Health -= Damage;
if (Health <= 0)
{
Die();
}
}
public function Die()
{
if(this.parent)
{
this.parent.removeChild(this);
//HERE IS THE ERROR
Game.level1.enemies_arr.splice(this,1);
}
}
}
}
오류의 원인은 무엇입니까? 특정 라인을 검색 할 시간을 절약 할 수 있습니다. 죄송합니다. 코드를 검색 한 후에 오류에 대한 설명을 보았습니다 ... – Nunners
드디어 찾아 냈습니다. 3 코드 묶음을 분리하여 읽을 수있는 방법이 있습니까? 나는 그것을 표시하는 줄 번호를 어떻게 보지 못하니? – Yaniv