我目前正在使用Storyboard在swift上构建游戏。游戏围绕从捕捞龙虾产生收入。用户有龙虾罐,它们可以放入水中的近岸区域或外围区域。没有经验。我对如何在swift中编码知之甚少。
目前我的问题是了解碰撞检测。屏幕有三个区域,用户可以将其拖入其中。第一个屏幕是龙虾盆的起始位置,玩家必须从中将盆拖入近岸或近海位置。目前,我已设法编写拖放花盆的动作,因此可以将它们放置在屏幕上的任何位置。我希望做的是当盆落在离岸箱的近岸区域内时能够使盆突然就位。此外,当盆被落到位时,我希望它们被排成一排,等间隔,并在下面排成一排,填满盒子。
图片 -
我想我还应该提一下,背景是一个图像视图,作为游戏运行时视图的截图。我这样做是为了避免分层,因为有些花盆有时会在拖动它们时移动到盒子后面。
提前致谢。
答案 0 :(得分:0)
这里有一些想法:
你已经有了移动瓷砖的代码,这很好。你现在需要的只是相同的数学。 虽然你的背景是一个图像,但你还需要一些数据模型来保存你的东西(或你的花盆所属的地方)。重要的是要知道,如果锅是在“我的锅”或“Inshor”或“Outshore”。这些信息必须保留在某些对象中,如“myPots”和“inhore”等 所以拖动不仅会移动屏幕上的花盆,还会改变花盆所属的位置。
提示:区域(myPots,...)的表示可以使用不可见区域来完成。看不见,因为你已经有了背景。但是一个不可见的矩形使你能够在没有复杂的重新计算的情况下调整ui的大小。
我会像这样划分这个区域:
坐标只是更好理解的例子 大多数游戏引擎在左上角使用坐标(0,0) 因此,如果拖动并释放一个底池,则必须计算拖动的终点并将其与您的区域进行比较。不需要复杂的碰撞检测,因为您只测试一个点是否在一个区域内。但是如果你想要碰撞检测,请搜索AABB碰撞检测(如此处https://studiofreya.com/3d-math-and-physics/simple-aabb-vs-aabb-collision-detection/)。
在你的情况下,做出决定就足够了:
if draggedPot.endCoordinate.y > 100 {
// in or out shore
if draggedPot.endCoordinate.x > 300 {
// outshore
}
else {
// inshore
}
}
else {
// still in myPots
}
我希望你明白这一点:)
连续安排它也是一些数学。环绕一个区域的盆,一个接一个地放置,始终start-x + width-of-pot + some space
。如果这大于区域的宽度,则将y设置为height of pot + some space
,x从零开始。