【发布时间】:2015-05-14 19:18:52
【问题描述】:
我有一系列随机生成的收藏品。当它们与玩家发生碰撞时,它们会从舞台上移除,并且分数会增加一个 scoreValue。我希望数组中的每个收藏品都有不同的 scoreValue,但我无法得到它。以下是我最新的与此相关的所有代码。
public class Main_EnemySpawnTest_3 extends MovieClip
{
// variables
var player:Player = new Player;
var collectables:Array = [Collectable1, Collectable2, Collectable3];
var collectablesRandomNumber:int = Math.random() * (collectables.length);
var collectable = new collectables[collectablesRandomNumber];
var score:uint = 0;
// constructor function
public function Main_EnemySpawnTest_3():void
{
// listeners
addEventListener(Event.ENTER_FRAME, checkEveryFrame);
spawnCollectablesButton.addEventListener(MouseEvent.CLICK, spawnCollectablesClick);
}
// enter frame, check every frame
public function checkEveryFrame(event:Event):void
{
// score
messageDisplay.text = String (score);
}
// hit test
function hitTest (event:Event):void
{
// hit test with collectables
if (collectable.hitTestObject (player) == true)
{
var scoreValue:uint;
if (stage.contains (collectable))
{
if (collectables[0])
{
scoreValue = 100;
}
else if (collectables[1])
{
scoreValue = 300;
}
else if (collectables[2])
{
scoreValue = 700;
}
removeChild (collectable);
score = score + scoreValue;
}
}
}
}
目前,可通过单击按钮生成收藏品。如果有帮助,代码如下。
// collectable spawn button
function spawnCollectablesClick (event:MouseEvent):void
{
var oldCollectable = collectable;
if (stage.contains (oldCollectable))
{
removeChild (oldCollectable);
}
var collectablePositionRandomNumber:int = Math.random() * 3;
var collectablePositionX:int = stage.width - (collectable.width * -0.5);
collectable = new collectables[Math.floor(Math.random() * collectables.length)];
collectable.x = collectablePositionX;
globalSpeed = 5;
if (collectablePositionRandomNumber == 0)
{
collectable.y = topPosition;
}
else if (collectablePositionRandomNumber == 1)
{
collectable.y = centerPosition;
}
else if (collectablePositionRandomNumber == 2)
{
collectable.y = bottomPosition;
}
addChild (collectable);
trace (collectable);
}
【问题讨论】:
-
您如何创建/实例化您的收藏品?让我猜猜,你的分数总是上升100?当您执行
if(collectables[0])时,它只是在寻找一个真实的价值。因此,只要collectables[0]的结果不是空/假/未定义/负数,它就会评估为真。由于您在collectables[0]中有可能是一个对象,因此条件将始终为真。 -
目前,我正在自己编写此代码,点击按钮即可生成收藏品。最终,它将是一个计时器、基于图块的数组或其他东西。我会把代码放在原帖中
-
Collectable1、2 和 3 来自 collectables 数组。每个都是它自己的收藏品(现在,不同颜色和形状的硬币)。当他们与玩家发生碰撞时,我需要他们奖励不同的得分值。现在代码运行,但它总是只奖励 100 分。我需要每次硬币碰撞都给出正确的点值,所以 Collectable1 为 100,Collectable2 为 300,Collectable3 为 700。
标签: arrays actionscript-3 hittest