本文介绍了取阵列选择出一个周期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好了,所以我有这个code其中产卵位置放入数组,然后其中一个位置是随机选出与此code:

 让randx = spawnLocations [INT(arc4random_uniform(UInt32的(spawnLocations.count)))]
            obstacle.position = CGPoint(X:randx,Y:0)

对象产卵code:

  VAR spawnLocations:CGFloat的] = []FUNC getObjectSpawnLocation(){//创建5个可能地点产卵
让numberOfNodes = 5    //节点之间的间距会改变,如果:1)的节点的数目改变时,2)屏幕宽度被改变,3)节点的大小被改变。
    因为我在0 ... numberOfNodes - 1 {        //间距用于空间了根据框架(与屏幕的宽度改变)节点
        VAR xPosition位置=(frame.maxX / * - * thePlayer.size.width /)/ CGFloat的((numberOfNodes - 1))* CGFloat的(I)        //默认情况下,添加一个半球员的宽度,因为节点的锚点(0.5,0.5)
        xPosition位置+ = thePlayer.size.width / 2        //我不知道这是什么一样,但它的工作原理。
        xPosition位置 - = frame.maxX / 1.6
        spawnLocations.append(xPosition位置)    }
  ()
}

但我有一个问题,因为有时比赛派生的对象,如下面的图片,它不会让我的球员提前任何进一步的没有他们死去,所以我的问题是:

反正我可以从这样阻止它?

也许采取产卵的地点之一出数组暂时的?

我也应该注意到,每一个对象(头骨)都产生了一个接一个的不是一次后头骨可以在任何的5个水平位置产卵。


解决方案

玩家只能被困在头骨和屏幕的边缘之间。你应该跟踪你是否正在播放或不是楔入,例如:

  //保持实例变量来跟踪你的当前状态
BOOL lineFromEdge; //是,如果你目前正在绘制一个头骨的线从边缘
BOOL leftEdge; //如果是如果从右边线从左侧边缘起源,NO
INT previousIndex;

然后确定值如下:

   - (INT){randomIndex    INT randIndex = INT(arc4random_uniform(UInt32的(spawnLocations.count)));    //这个前pression告诉你,如果你目前的指数处于一个边缘
    如果(randIndex == 0 || randIndex ==(spawnLocations.count - 1)){
        lineFromEdge = YES;
        leftEdge = randIndex == 0;
    }    //检查你留下的空白
    BOOL didLeaveGap = ABS(randIndex - previousIndex)GT; 1
    如果(didLeaveGap)lineFromEdge = NO;    如果((lineFromEdge&安培;&安培; leftEdge和放大器;&安培; randomIndex == spawnLocations.count)||
        (lineFromEdge&安培;&安培;!leftEdge和放大器;&安培; randomIndex == 0)){        //您已绘制的线从一个边缘到另一个而不留间隙;
        //计算另一个索引并再次执行相同的检查
        返回[个体经营randomIndex]    }    //你的指数是有效的
    previousIndex = randIndex;
    返回randIndex;
}

这篇关于取阵列选择出一个周期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 08:35