2014-10-31 50 views
0

我有一个3D无限亚军赛车类型的游戏,其中玩家是静止的和背景移动。在我的游戏中,我想随时随机产生硬币,并且硬币必须在玩家之前产生很多,并且硬币的z轴减小,保持y轴恒定,x轴值在-2和-2的随机范围内。来自“简明英汉词典”这些硬币产卵正确,但它们是以不规则的方式产生的。我在我的场景中创建了四个硬币游戏对象,我想直接产生4个硬币,因为玩家可以很容易地收集硬币,因为他们直接进入玩家。玩家的动作只在x轴上从-2到2.现在我的问题是硬币不规则地产生,因为玩家不能容易地收集硬币。这是我的代码:在无限亚军3D游戏中随机产生硬币

function Update() 
{ 
    MoveCoin(); 
} 

function MoveCoin() 
{ 
    ReleaseCoin(); 
    //CoinsOnRoad is an array containing the current coins which are on the road 
    //CoinPool is the array of coins 
    for(var i:int =0;i<CoinsOnRoad.length;i++) 
    { 
    var gcoin:GameObject = CoinsOnRoad[i] as GameObject; 
    gcoin.transform.position.z-=3*speed*Time.deltaTime; 
    if(gcoin.transform.position.z>=-10) 
    { 
     //Do nothing if the coin is on the visible area of the road. If it becomes invisible 
     //remove the coins from CoinsOnRoad Array and insert the coin back to the CoinPool Array 
    } 
    else 
    { 
     CoinPool.push(gcoin); 
     CoinsOnRoad.remove(gcoin); 

    } 

    } 
} 

function ReleaseCoin() 
{ 
    if(CoinPool.length==0) 
    { 

    } 
    else 
    { 
     var coin:GameObject=CoinPool.shift() as GameObject; 
     CoinsOnRoad.push(Instantiate(coin,new Vector3(Random.Range(-2.0,2.0),0.3,30+Random.Range(1,10)),Quaternion .identity)); 

    } 
} 

硬币产卵正确,但不规则的顺序。有人可以帮我吗?先谢谢了。因为我刚刚接触团结,我不知道我的游戏逻辑是否正确。如果我错了代码中的某处,有人可以用代码纠正我。

+0

尝试没有的DeltaTime乘法 – LearnCocos2D 2014-10-31 08:10:29

+0

@ LearnCocos2D它亘古不变的工作.. – njnjnj 2014-10-31 08:16:51

回答

0

如果你想要硬币产生直线,它可能只是帮助他们不会随机产卵。

在你的循环中,你产生的每个硬币都有不同的随机位置。相反,您应该随机选择位置值并将其保存到变量中。然后你应该使用它在一个循环中产生多个硬币。

像这样:

var xPos = Random.Range(-2.0, 2.0); 
var forwardOffset = Random.Range(1, 10); 
var i = 0; 
var lineLength = Random.Range(1, CoinPool.length); 
while(i < lineLength) { 
    var coin:GameObject=CoinPool.shift() as GameObject; 
    CoinsOnRoad.push(Instantiate(coin,new Vector3(xPos, 0.3, 30 + forwardOffset + i), Quaternion.identity)); 
    i += 1; 
} 
+0

我不想实例化的方法,而不是我想要的对象池的方法,因为对象池容易编程.. – njnjnj 2014-11-20 06:38:14

+0

然后用一个方法替换'Instantiate',该方法使用池来返回硬币gameobject。 对象池简单如实例化一堆对象离开屏幕并在队列结构中跟踪它们。当你想使用池中的对象时,你从该结构中出队并使用该对象。当你完成对象时,将它移出屏幕并将其排入队列,而不是使用“Destroy”。无论您如何提供硬币对象,此硬币放置方法都可以工作。 – Agumander 2014-11-20 16:53:51