精灵出现在模拟器中,而不是在设备上
Posted
技术标签:
【中文标题】精灵出现在模拟器中,而不是在设备上【英文标题】:Sprites show up in simulator, not on device 【发布时间】:2016-01-09 01:06:15 【问题描述】:当您按下按钮时,这个简单的项目会在字段的中心插入一个方形精灵,它会调用下面的 add() 函数。在模拟器中,当您添加多个精灵时,它会将其他精灵推开,因此当您多次按下它时,您会... screen shot from simulator, iphone 6, ios 9.2,这就是我想要的行为。
但是在我的 iphone 上运行相同的代码,在添加相同数量的精灵后会产生这个...screen show from physical iphone 6, iOS 9.2
这是来自 GameScene.swift 的代码:
import SpriteKit
class GameScene: SKScene
override init(size: CGSize)
super.init(size:size)
self.physicsWorld.gravity = CGVectorMake(0, -1.0)
let worldBorder = SKPhysicsBody(edgeLoopFromRect: self.frame)
self.physicsBody = worldBorder
self.physicsBody?.friction = 0.5
func add()
let sprite = SKSpriteNode(color: UIColor.blueColor(), size: CGSize(width: 10, height: 10))
sprite.position = CGPointMake(self.frame.size.width / 2, self.frame.size.height / 2)
sprite.physicsBody = SKPhysicsBody(circleOfRadius: 8)
sprite.physicsBody?.friction = 0.0
sprite.physicsBody?.affectedByGravity = false
sprite.physicsBody?.restitution = 0.5
sprite.physicsBody?.linearDamping = 0.5
addChild(sprite)
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
我哪里错了?以及如何在真正的 iPhone 上获得我想要的行为?
【问题讨论】:
你需要使用圆形物理体吗?这适用于SKPhysicsBody(rectangleOfSize: sprite.size)
。
哇,你说的没错;但不幸的是,是的,我想要一个圆形物理体,因为每个精灵的图形都是圆形的,它就像一个不断增长的圆形细胞群。事实上,最初我使用圆形 SKShapeNodes 得到相同的结果;我切换到 SKSpriteNodes 只是为了看看它是否能解决问题。
【参考方案1】:
我不确定哪一个是期望的行为,但是如果您将它们从字面上堆叠在一起,它们不会滑动是有道理的。话虽如此,有办法解决这个问题。
请记住,节点使用浮点定位,但当然它们实际上只能以像素可见的方式定位。
1 像素在 2x 屏幕上为 0.5 点,在 3x 屏幕上为 0.33 点。考虑到这一点,您可以使用
class GameScene: SKScene
var xOffset: CGFloat = 0.05
var yOffset: CGFloat = 0.3
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
override init(size: CGSize)
super.init(size:size)
self.physicsWorld.gravity = CGVectorMake(0, -1.0)
let worldBorder = SKPhysicsBody(edgeLoopFromRect: self.frame)
self.physicsBody = worldBorder
self.physicsBody?.friction = 0.5
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
add()
updateOffsets()
func add()
let sprite = SKSpriteNode(color: UIColor.blueColor(), size: CGSize(width: 10, height: 10))
sprite.position = CGPointMake((self.frame.size.width / 2) + xOffset, (self.frame.size.height / 2) + yOffset)
sprite.physicsBody = SKPhysicsBody(circleOfRadius: 8)
sprite.physicsBody?.friction = 0.0
sprite.physicsBody?.affectedByGravity = false
sprite.physicsBody?.restitution = 0.5
sprite.physicsBody?.linearDamping = 0.5
addChild(sprite)
private func updateOffsets()
xOffset = -xOffset
yOffset = -yOffset
切换偏移量是重要的部分。如果您不这样做,您将遇到相同的问题,即完全堆叠在一起。我使用的偏移量非常接近模拟器的行为,但是轻按几下你会发现它有点不同。希望您不关心匹配您在模拟器中获得的完全相同的模式。它与此代码非常相似。如果你在乎的话,你会注意到改变偏移量会改变模式。
【讨论】:
是的,这很漂亮!我非常感谢您和本网站上所有抽出时间提供帮助的人。以上是关于精灵出现在模拟器中,而不是在设备上的主要内容,如果未能解决你的问题,请参考以下文章
UITextView:链接检测在模拟器中工作,而不是在设备上
React Native 0.44 PushNotifcationIOS.scheduleLocalNotification 在模拟器中处理 JavaScript Date 对象,而不是在设备上