我在游戏中运行了一个生成SKSpriteNodes的for循环。
我希望我的第一个块从(20,40)开始,并为每个新块添加20到x位置和40到y位置。
第一块(20,40) 第二块(40,80) 第三区(60,120) 等等。
y位置的行为与我想要的方式相同,但是x位置会随机地从我的屏幕上的任何位置开始,然后为每个生成的新块添加20个位置。
以下是我的代码。
func generateBlocks() {
for _ in 1..<5 {
xP += 20
yP += 40
let xx = CGFloat (xP)
let yy = CGFloat (yP)
print("x position: \(xx)")
print("y position: \(yy)")
let resourcePath = NSBundle.mainBundle().pathForResource("Blocks", ofType: "sks")
let blocks = MSReferenceNode(URL: NSURL (fileURLWithPath: resourcePath!))
blocks.goals.position = CGPoint (x: xx,y: yy)
addChild(blocks)
}
}
我还添加了print语句,说明运行代码时的样子。
我尝试切换xP和yP初始化的顺序。那没用。
有什么建议吗?
答案 0 :(得分:0)
我更倾向于使用while loops进行此类操作,您必须从一开始就施加条件,例如限制:
class GameScene: SKScene {
let deltaX:CGFloat = 20.0
let deltaY:CGFloat = 40.0
override func didMoveToView(view: SKView) {
let widthLimit = self.frame.width-40
let heightLimit = self.frame.height-140
let startX:CGFloat = 80.0
drawStair(startX,limits:CGSizeMake(widthLimit,heightLimit))
}
func drawStair(startFromX:CGFloat,limits:CGSize) {
var currentX:CGFloat = startFromX
var currentY:CGFloat = startFromX+deltaY
while currentX<limits.width && currentY<limits.height {
drawBlock(CGPointMake(currentX,currentY))
currentX += deltaX
currentY += deltaY
}
}
func drawBlock(position: CGPoint,size:CGSize = CGSizeMake(40,40)) {
let block = SKSpriteNode(color: UIColor.redColor(), size: size)
block.position = position
block.name = "block"
addChild(block)
}
}
<强>输出强>: