本文介绍了取阵列选择出一个周期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
好了,所以我有这个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;
}
这篇关于取阵列选择出一个周期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!