当我将它们拖放到屏幕的某些区域时,如何让盒子卡入到位?

问题描述 投票:0回答:1

我目前正在使用Storyboard在swift上构建游戏。游戏围绕从捕捞龙虾产生收入。用户有龙虾罐,它们可以放入水中的近岸区域或外围区域。没有经验。我对如何在swift中编码知之甚少。

我目前的问题是理解碰撞检测。屏幕有三个区域,用户可以将其拖入其中。第一个屏幕是龙虾盆的起始位置,玩家必须从中将盆拖入近岸或近海位置。目前,我已设法编写拖放花盆的动作,因此可以将它们放置在屏幕上的任何位置。我希望做的是当盆落在离岸箱的近岸区域内时能够使盆突然就位。此外,当盆被落到位时,我希望它们被排成一排,等间隔,并在下面排成一排,填满盒子。

图片 -

我想我还应该提一下,背景是一个图像视图,作为游戏运行时视图的截图。我这样做是为了避免分层,因为有些花盆有时会在拖动它们时移动到盒子后面。

提前致谢。

ios swift
1个回答
0
投票

这里有一些想法:

你已经有了移动瓷砖的代码,这很好。你现在需要的只是相同的数学。虽然你的背景是一个图像,但你还需要一些数据模型来保存你的东西(或你的花盆所属的地方)。重要的是要知道,如果锅是在“我的锅”或“Ins​​hor”或“Outshore”。这些信息必须保留在某些对象中,如“myPots”和“inhore”等。 所以拖动不仅会移动屏幕上的花盆,还会改变花盆所属的位置。

提示:区域(myPots,...)的表示可以使用不可见区域来完成。看不见,因为你已经有了背景。但是一个不可见的矩形使你能够调整ui的大小而无需复杂的重新计算。

我会像这样划分区域:

enter image description here

坐标只是更好理解的例子。 大多数游戏引擎使用左上角的坐标(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从零开始。

© www.soinside.com 2019 - 2024. All rights reserved.