Actionscript 3 saprate类中的hitTestObject
我正在做一个简单的游戏。这是我面临的问题,但首先我要告诉你我的班级结构。 (我正在使用flash cs5.5)Actionscript 3 saprate类中的hitTestObject,actionscript-3,actionscript,hittest,Actionscript 3,Actionscript,Hittest,我正在做一个简单的游戏。这是我面临的问题,但首先我要告诉你我的班级结构。 (我正在使用flash cs5.5) 敌人。as:该类与MovieClip(在库中)链接,具有简单敌人移动和方向的代码 Hero.as:与库中的MovieClip链接。英雄简单动作守则 EnemyManager.as:每20秒创建一个新敌人 HeroManager.as:创建英雄(仅一次,其他功能将在以后添加) HittingManager.as:检查共谋(这里有问题) 现在我的问题出现在HittingManager.as
敌人。as
:该类与MovieClip(在库中)链接,具有简单敌人移动和方向的代码
Hero.as
:与库中的MovieClip链接。英雄简单动作守则
EnemyManager.as
:每20秒创建一个新敌人
HeroManager.as
:创建英雄(仅一次,其他功能将在以后添加)
HittingManager.as
:检查共谋(这里有问题)
现在我的问题出现在HittingManager.as
类中,因为我想在这个类中添加HittTestObject函数。我将发布3个重要类的代码。(EnemyManager.as
,HeroManager.as
,
)
下面是EnemyManager.as类的代码
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.sampler.Sample;
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.sampler.NewObjectSample;
public class EnemyManager extends MovieClip
{
private var hManager:HittingManager = new HittingManager();
private var timer:Timer = new Timer(2000);
public static var hitting:Boolean = false;
public static var enemy:Enemy;
public function EnemyManager()
{
addEventListener(Event.ADDED_TO_STAGE, added);
}
public function addEnemy(newEnemy:Enemy):void
{
addChild(newEnemy);
hManager.registerEnemy(newEnemy);
}
private function added(event:Event):void
{
addEventListener(Event.ENTER_FRAME, update);
trace("added enemy manger");
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();
}
private function onTimer(event:TimerEvent):void
{
enemy = new Enemy();
this.addEnemy(enemy);
}
private function update(event:Event):void
{
}
}
}
这里是Hittest.as类(我尝试了许多技术,但都没有成功),所以如果station为空,我就离开
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class HittingManager extends MovieClip
{
private var eManager:EnemyManager;
private var hEnemy:Enemy = new Enemy();
private var _enemies:Array;
private var _hero:Hero;
public function HittingManager()
{
//trace("Hitting Manager working");
_enemies = [];
addEventListener(Event.ADDED_TO_STAGE, added);
}
public function registerEnemy(newEnemy:Enemy):void
{
_enemies.push(newEnemy);
}
public function registerHero():void
{
//trace("heroRegisterd");
_hero = HeroManager.hero;
addChild(_hero);
}
private function added(event:Event):void
{
if(!_hero)
{
this.registerHero();
}
trace("Hitting manger added");
addEventListener(Event.ENTER_FRAME, update);
}
private function update(event:Event):void
{
if(_hero)
{
for each( newEnemy:Enemy in _enemies)
{
if(_hero.hitTestObject(newEnemy) )
{
trace("Hitting")
}
}
}
}
}//class
}//package
下面的修订版使您的代码能够在尽可能少的更改下工作,但它绝不是一个理想的解决方案。 您可能应该重构代码,以便敌方管理者不需要对HittingManager的公共静态引用
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class HeroManager extends MovieClip
{
public static var hero:Hero = new Hero();
public function HeroManager()
{
addEventListener(Event.ADDED_TO_STAGE, added);
}
private function added(event:Event):void
{
trace("hero manager added");
}
} //class
} //package
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.sampler.Sample;
import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.sampler.NewObjectSample;
public class EnemyManager extends MovieClip
{
public static var hManager:HittingManager;
private var timer:Timer = new Timer(2000);
public static var hitting:Boolean = false;
public static var enemy:Enemy;
public function EnemyManager()
{
addEventListener(Event.ADDED_TO_STAGE, added);
}
public function addEnemy(newEnemy:Enemy):void
{
addChild(newEnemy);
hManager.registerEnemy(newEnemy);
}
private function added(event:Event):void
{
addEventListener(Event.ENTER_FRAME, update);
trace("added enemy manger");
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();
}
private function onTimer(event:TimerEvent):void
{
enemy = new Enemy();
this.addEnemy(enemy);
}
private function update(event:Event):void
{
}
}
}
package
{
import flash.display.MovieClip;
import flash.events.Event;
public class HittingManager extends MovieClip
{
private var _enemies:Array;
private var _hero:Hero;
public function HittingManager()
{
//trace("Hitting Manager working");
_enemies = [];
addEventListener(Event.ADDED_TO_STAGE, added);
}
public function registerEnemy(newEnemy:Enemy):void
{
_enemies.push(newEnemy);
}
public function registerHero():void
{
//trace("heroRegisterd");
_hero = HeroManager.hero;
addChild(_hero);
}
private function added(event:Event):void
{
if (!_hero)
{
this.registerHero();
}
trace("Hitting manger added");
addEventListener(Event.ENTER_FRAME, update);
}
private function update(event:Event):void
{
if (_hero)
{
for each (var newEnemy:Enemy in _enemies)
{
if (_hero.hitTestObject(newEnemy))
{
trace("Hitting")
}
}
}
}
} //class
} //package
在主文档类中,您应该具有以下内容:
var hittingManager:HittingManager = new HittingManager();
EnemyManager.hManager = hittingManager;
var enemyManager:EnemyManager = new EnemyManager();
var heroManager:HeroManager = new HeroManager();
addChild(heroManager);
addChild(enemyManager);
addChild(hittingManager);
请解释一下“每个(变量敌人:敌人中的敌人)”我不太熟悉“每个”和“in”关键字。谢谢,请你解释一下“每个(var敌人:敌人在敌人中)”我对“每个”和“在”关键字有点陌生。谢谢,另外请告诉我应该在哪里访问RegisterEnmy/registerHero功能我为响应的延迟道歉,我整个周末都不在电脑旁。我希望澄清能有所帮助。朋友,我仍然有困惑,你能回应吗?所以我解释我的问题。
var hittingManager:HittingManager = new HittingManager();
EnemyManager.hManager = hittingManager;
var enemyManager:EnemyManager = new EnemyManager();
var heroManager:HeroManager = new HeroManager();
addChild(heroManager);
addChild(enemyManager);
addChild(hittingManager);