当前位置: 首页 > 面试题库 >

SkSpriteNode在通用游戏中的位置

舒永嘉
2023-03-14
问题内容

我正在使用Swift在纵向模式下为所有iOS设备创建通用游戏。在GameViewController中,我正在创建如下场景:

let scene = GameScene(size:CGSize(width: 1536, height: 2048))
scene.scaleMode = .AspectFill

背景图片的分辨率为1536x2048,因此在iPad上使用scaleMode以上时,它将以完整尺寸显示,在iPhone
6上,则以修剪过的侧面显示1152x2048。在所有设备上都能正常工作,并且只需要一张背景图像。问题是,如果我要求size.width或self.frame.size.width,即使实际可见区域为例如1152,它也始终返回1536。

我该如何设置SkSpriteNode相对于可见区域的位置,以使其在每个设备的角落都为50x50?


问题答案:

我该如何设置SkSpriteNode相对于可见区域的位置,以使其在每个设备的角落都为50x50?

“可见区域”只是视图。

因此,您可以相对于 视图 而不是 场景进行位置调整 。实际上,我在游戏中做了很多事情,这是通用的,并且可以在OS X和iOS上运行。

就我而言,我通常是针对用户界面执行此操作,因此我可能具有缩放的场景,但是我想设置一些相对于缩放的场景而不是相对于可见区域(即视图)的位置。

为此,您可以编写一个将视图坐标转换为相应场景坐标的函数。

这是我使用的功能。请注意,我从视线的高度中减去了所需的y位置,以便可以像sprite-kit一样将(0,0)当作左下角,而不是像UIKit那样对待左上角。

func convert(point: CGPoint)->CGPoint {
    return self.view!.convert(CGPoint(x: point.x, y:self.view!.frame.height-point.y), to: self)
}

这是使用此功能的示例:

self.node.position = convert(CGPoint(x: 50, y: 50))

不管场景如何缩放和大小,这始终将强制节点相对于视图(屏幕的可见部分)的位置为(50,50)。



 类似资料:
  • 我正在做一个多人游戏。每个客户端都有一个在共享环境中移动的字符。 我使用socket.io创建rooms,使用peer.js创建客户端之间的点对点连接。 我正在尝试做的是使每个客户端能够更新他的地图中其他玩家的角色的位置。 为此,每个客户端应该拥有其他玩家的键盘光标(箭头键)的状态,以便他能够用行走动画移动他们对应的角色。 p2p:我正在考虑在客户端之间创建双工流,这样每个客户端将拥有其他玩家的键

  • 我希望在向用户发送登录之前检查会话——每个URL请求都会检查这是否来自有效会话——如果不是,请将它们发送到登录页面,否则正常处理。如果用户已经有一个活动会话,我们不会向他们显示登录页面,而是将他们带到预定义的主页。 我在google上搜索了相关内容,知道可以通过在控制器中使用< code>@Before注释来完成,但不知道< code>@Before如何工作以及如何使用?我用的是play 1.2.

  • 卡洛斯·巴罗斯 编辑:也许我应该这么说,但这个游戏是一个类似反击或英雄联盟的游戏,我没有做这个游戏。

  • 你好,我正在编写一个2D游戏,我已经找到了几种计算每秒帧数的方法,但我还没有真正理解架构规则,其中之一是: 我无法理解的是,渲染屏幕需要一些时间,所以我应该将这部分放在循环的绝对末端(在渲染获得输入等(绝对末端)之后): 所以基本上在游戏循环开始时,我得到开始时钟,然后我运行每个函数,例如移动碰撞渲染等,然后我评估增量时钟并在此基础上计算fps?有很多fps计算“公式”,但我需要一个真正的程序架构

  • 问题内容: 我在Swift中创建了一个游戏,其中涉及怪物的出现。怪物根据计时器的出现和消失如下: 然后我就这样称呼它(例如在2秒后生成): 然后,我进行了类似的隐藏操作(在x秒后,我将怪物消灭了)。 因此,我在屏幕顶部创建了一个设置图标,当您点击它时,会出现一个巨大的矩形窗口以更改游戏设置,但是自然的问题是怪物仍然在背景中生成。如果我将玩家带到另一个屏幕,我相信我会失去我所有的游戏状态,并且必须重

  • 我很难把我的心思放在这件事上。每当玩家猜错时,它应该从最初的余额中减去他/她的赌注。由于它是在一个循环中,它总是从一开始就取初始平衡,每次都吐出相同的平衡。(很明显)我试过分配不同的变量,但似乎无法找到答案。 我已经省略了中等难度和难难度的方法,因为它们现在是没有用的,直到我弄清楚这个。