Actionscript:如何创建一个计数器来注册一个 hitTestObject 并在主舞台上显示分数?
Posted
技术标签:
【中文标题】Actionscript:如何创建一个计数器来注册一个 hitTestObject 并在主舞台上显示分数?【英文标题】:Actionscript: How can I create a counter that registers a hitTestObject and shows the score on the main stage? 【发布时间】:2019-09-16 21:38:31 【问题描述】:我的游戏计算对象的命中次数,并将用户带到获胜或失败的页面。在主舞台上显示数字时,我的 hitTestObject 如何计算命中数?如果用户点击“friend” 5 次,我希望它播放“youWin”层,如果他们点击“biter”一次,我希望它播放“youLose”层。 (请帮助这是我的最后一个项目,我快完成了)谢谢! :)
stop();
addEventListener(Event.ENTER_FRAME,fishHit);
function fishHit(e:Event)
if (theFish.hitTestObject(biter))
removeEventListener(Event.ENTER_FRAME,fishHit);
gotoAndPlay("youLose");
var theFish:fish = new fish();
theFish.x = 200
theFish.y = 260
addChild(theFish);
for (var which=0; which<5; which++)
var biter:shark=new shark();
biter.x=1400;
biter.y=int(Math.random()*660.0+30.0);
addChild(biter);
for (var what=0; what<5; what++)
var friend:starfish=new starfish();
friend.x=1400;
friend.y=int(Math.random()*660.0+30.0);
addChild(friend);
var counter : int = 0;
addEventListener(Event.ENTER_FRAME,winner);
function winner (e:Event)
if(theFish.hitTestObject(friend))
counter += 1
scoreboard.score_text.text = counter;
if(counter == 5)
removeEventListener(Event.ENTER_FRAME,winner);
gotoAndPlay("youWin");
【问题讨论】:
那么什么不能按预期工作?顺便说一句,一旦 theFish 击中朋友,您想删除该 theFish,因此它不会在每一帧上增加计数器变量。此外,您只需要一个 event.ENTER_FRAME 函数。 当我运行程序时,当我点击“朋友”时,计数器不计数。它也给了我这个错误:TypeError:错误#1009:无法访问空对象引用的属性或方法。在 Final_Game_fla::MainTimeline/winner() 【参考方案1】:您的代码需要进行许多更新,但我会尝试复制并粘贴您的代码并稍作修改。您应该在 for 循环之外定义变量,还必须将多个对象(如“朋友”)添加到数组中。
stop();
// arrays
var friends:Array = new Array();
var biters:Array = new Array();
var counter : int = 0;
var theFish:fish = new fish();
theFish.x = 200
theFish.y = 260
addChild(theFish);
for (var which=0; which<5; which++)
var biter = new shark();
biter.x=1400;
biter.y=int(Math.random()*660.0+30.0);
addChild(biter);
// push it to the array
biters.push(biter)
for (var what=0; what<5; what++)
var friend = new starfish();
friend.x=1400;
friend.y=int(Math.random()*660.0+30.0);
addChild(friend);
// push it to the array
friends.push(friend)
addEventListener(Event.ENTER_FRAME, enterFrame);
function enterFrame(e:Event)
// theFish vs biters
for (var i:int = 0; i < biters.length; i++)
if (theFish.hitTestObject(biters[i]))
removeEventListener(Event.ENTER_FRAME, enterFrame);
gotoAndPlay("youLose");
// theFish and friends
for (i = 0; i < friends.length; i++)
if(theFish.hitTestObject(friends[i]))
// remove this friend so it does not increase counter
friends.splice(i,1);
counter += 1
scoreboard.score_text.text = counter;
if(counter == 5)
removeEventListener(Event.ENTER_FRAME, enterFrame);
gotoAndPlay("youWin");
【讨论】:
非常感谢您!唯一的问题是计数器仍然不起作用。我将计数器的文本做成了一个名为 score_text 的符号,对吗? var myText:TextField = new TextField(); myText.text = counter.toString();应该是这样的。如果您觉得答案有帮助,请考虑点赞或接受。以上是关于Actionscript:如何创建一个计数器来注册一个 hitTestObject 并在主舞台上显示分数?的主要内容,如果未能解决你的问题,请参考以下文章
ActionScript 3.0 - 获取数组中相同值的计数