【发布时间】:2018-03-08 09:27:08
【问题描述】:
我一直在开发一个滚动的无尽奔跑游戏(在 Swift 4 中),我想检测玩家是否正在触摸块/瓷砖。目前,我正在使用此代码:
let centerX = Float(UIScreen.main.bounds.size.width) / 2
for i2 in 0...tiles.count-1 {
if scrollX + centerX > Float(tilePosition[i2][0] - 60) {
if scrollX + centerX < Float(tilePosition[i2][0] + 60) {
if Int(player.center.y) > tilePosition[i2][1] - blockFloatings[playerFrame] {
if Int(player.center.y) < tilePosition[i2][1] + blockFloatings[playerFrame] {
while Int(player.center.y) > tilePosition[i2][1] - blockFloatings[playerFrame] {
playerGravity = 0
player.center.y = player.center.y - CGFloat(1)
}
}
}
}
}
}
代码有效,但不够准确。我有圆形瓷砖,如this,还有波浪形顶部的瓷砖,如this。
现在,我的代码假定图块是正方形,但有时不是。如果图块不是正方形,就像水一样,我想要它,这样当你向右或向左移动时,玩家就会上下移动。
如果您要回答这个问题,以下是您可能需要了解的有关我当前代码的一些事项:
centerX - 屏幕中间
tiles - 块/图块的UIImageView()
scrollX - X 中的卷轴
tilePosition - 包含块/图块位置的数组
blockFloatings - 玩家UIImageView() 将改变图像,每张图像的高度不同。该数组包含玩家不应该从地面跌落的数字(减去 y 位置)
playerFrame - 播放器的图片ID
player - 代表玩家的UIImageView()
playerGravity - 表示玩家每帧应该以多快的速度摔倒的变量
编辑:你也可以回答不可能。
【问题讨论】:
-
你不会用 UIKit 获得更好的碰撞检测,至少不容易。如果您想检测与自定义形状的碰撞,您应该查看
SpriteKit和/或其他游戏和物理引擎。