我正在学习成为一名游戏设计师,现在我的Flash游戏遇到了一些问题。
该游戏有一个Counter Class,其分数类可以扩展Counter。它将被添加到我的PlayScreenA类的舞台上。
计时器以数字开头,每24帧减少一次。但是在我的英雄级别中,我可以拿起一些硬币,而硬币会增加我的分数上的时间。
问题是:我如何在Hero Class中说出在Counter Class中执行addToValue函数?
代码: 在PlayScreenA类中创建我的分数:
private var myTime:Score = new Score();
private function create_time (){
myTime.x = 800;
myTime.y = 50;
addChild(myTime);
}
柜台类:
package
{
import flash.display.MovieClip;
public class Counter extends MovieClip
{
public var currentValue:Number;
public function Counter()
{
reset();
}
public function addToValue( amountToAdd:Number ):void
{
currentValue = currentValue + amountToAdd;
updateDisplay();
}
public function subToValue( amountToSub:Number ):void
{
currentValue = currentValue - amountToSub;
updateDisplay();
}
public function reset():void
{
currentValue = 20;
updateDisplay();
}
public function updateDisplay():void
{
}
}
}
分数等级:
package
{
import flash.text.TextField;
import flash.events.Event;
public class Score extends Counter
{
protected var _timeCounter:int;
public function Score()
{
super();
addEventListener(Event.ENTER_FRAME, onUpdate);
}
override public function updateDisplay():void
{
super.updateDisplay();
scoreDisplay.text = currentValue.toString();
}
protected function onUpdate(e:Event):void
{
_timeCounter++;
trace(currentValue);
if (_timeCounter == 24)
{
this.subToValue( 1 );
_timeCounter = 0;
}
}
}
}
我需要调用函数的Hero Class:
for(var i:int; i<collisionList.length;i++)
{
var $collision:platform_tile = collisionList[i];
if($hasCollided = hitbox.hitTestObject($collision.hitBox) && $collision.alpha<0.8 && $collision.alpha>0.6)
{
$collision.alpha=0;
$collision.visible = false;
//Here is where I want to call my subToValue function!
break;
}
答案 0 :(得分:1)
由于addToValue
和subToValue
是实例方法,您应该为英雄对象中的计数器对象提供引用(实例变量),然后调用其addToValue
或{{1方法。
subToValue
你应该在你的英雄对象中启动它,或者通过getter / setter指定一个预先存在的计数器对象。然后你可以打电话:
var theCounter:Counter;
答案 1 :(得分:0)
我假设您正在尝试访问最初在PlayerScreenA类中创建的Score类的对象...
如果是这种情况,那么你要么派生两个类之间的关系来传递这个对象,要么你可以保持一个静态类来跟踪全局级别的函数......
public class AppRefrences
{
public static var addToValueFunc:Function;
}
在玩家A级中,
private var myTime:Score = new Score();
private function create_time (){
myTime.x = 800;
myTime.y = 50;
addChild(myTime);
// This is where you set the function
Apprefrences.addToValueFunc = myTime.addToValue;
}
在英雄课堂上,
for(var i:int; i<collisionList.length;i++)
{
var $collision:platform_tile = collisionList[i];
if($hasCollided = hitbox.hitTestObject($collision.hitBox) && $collision.alpha<0.8 && $collision.alpha>0.6)
{
$collision.alpha=0;
$collision.visible = false;
// This is where you call the function
if(AppRefrences.addToValueFunc != null)
AppRefrences.addToValueFunc(0);
break;
}
尝试使用getter&amp; setters控制静态变量的更新。为了清楚起见,我没有把它包括在内。