使用SpriteKit和SWIFT为游戏构建网格级别

时间:2016-06-16 14:18:58

标签: ios swift sprite-kit skspritenode 2d-games

我正在寻找建立游戏关卡的最佳方式:

  • 游戏将由多个级别组成,每个级别都将 唯一的。
  • 你将扮演一个正在移动的物体(这里是星星) 在网格上。
  • 对象只能移动到底部,它不能返回。
  • A级由许多情况组成,每个案例都会有不同 行为。
  • 我的关卡会有背景,屏幕宽度,但是 高度将取决于水平,我想高度的很多倍 屏幕。
  • 背景根据物体移动而移动

目前,我正在研究一个小型原型,只是为了学习。

proto

在阅读了很多教程之后,我的想法是使用SKSpriteNode创建x正方形(菱形)。并用标识符识别正方形。

我不知道它在性能方面是否是一个很好的解决方案?他们将在一个级别上有很多正方形。我没有意识到:)

我们是否受限于一个场景中的节点数量?

1 个答案:

答案 0 :(得分:1)

我认为没有必要。您还可以使用由方格SKSpriteNode填充的单个CGPath背景,如果您想增加难度级别,则可以制作非常快速的游戏。您可以通过处理每个CGPath来组织游戏的“功能”部分,当您必须更改正方形时,您可以使用代表该正方形的CGPath创建一个正方形,给它一个例如,使用CGPath使用SKSpriteNode并使用此CustomScrollView来指定一个索引,以便轻松了解它是谁:

  • 覆盖方形背景
  • 发挥爆炸效果
  • 改变正方形的颜色而不是一般的正方形颜色
  • 等。

P.S。:我已经看到你想要创建一个scrollView,在swift中有一个很好的Spritekit库,名为scrollView = CustomScrollView(frame: CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height), scene: self, moveableNode: moveableNode, scrollDirection: .Vertical) scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height * 3) // makes it 3 times the height view?.addSubview(scrollView) here,它很有用,它只是使用:

CGPathContainsPoint(<#T##path: CGPath?##CGPath?#>, <#T##m: UnsafePointer<CGAffineTransform>##UnsafePointer<CGAffineTransform>#>, <#T##point: CGPoint##CGPoint#>, <#T##eoFill: Bool##Bool#>)

更新:关于您的评论,答案是肯定的:当您使用路径时,您使用按点组织的一组元素(请查看此post以了解如何)。

您可以使用原生:

CGPathGetPathBoundingBox(<#T##path: CGPath?##CGPath?#>)

或使用此:

CGRectIntersectsRect(<#T##rect1: CGRect##CGRect#>, <#T##rect2: CGRect##CGRect#>)

使用它:

            var radiusMi = parseFloat(obj[8]);
            if (typeof radiusMi === 'undefined' || isNaN(radiusMi) || radiusMi == '') {
                radiusMi = 2;
            }
            var radiusMeters = radiusMi * 1609.344;
            var currentShape = new google.maps.Circle({
                map: map,
                radius: radiusMeters,
                strokeWeight: 0,
                fillColor: '#eb278d',
                fillOpacity: 0.25,
                center: circleLatLng
            });