从右到左滚动背景 Swift / Sprite Kit

Posted

技术标签:

【中文标题】从右到左滚动背景 Swift / Sprite Kit【英文标题】:Right to Left Scrolling Background Swift / Sprite Kit 【发布时间】:2016-01-18 23:23:27 【问题描述】:

我有一个滚动背景,但与原始图像相比,背景图像似乎被“放大”了。背景滚动得很好,但我不确定为什么图像被“放大”。任何帮助将不胜感激。

class GameScene: SKScene, SKPhysicsContactDelegate 


var blueBall:SKSpriteNode!
var backgroundImage:SKSpriteNode!
var backgroundImage2:SKSpriteNode!


override func didMoveToView(view: SKView) 



    self.view!.backgroundColor = UIColor(patternImage: UIImage(imageLiteral: "backgroundImage.png"))


    self.physicsWorld.gravity = CGVectorMake(0.0, -5.0)
    self.physicsWorld.contactDelegate = self

    blueBall = SKSpriteNode( imageNamed: "ball1111.png")
    blueBall.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))
    blueBall.physicsBody = SKPhysicsBody(circleOfRadius: blueBall.size.width / 0.85)

    blueBall.physicsBody!.dynamic = true
    blueBall.physicsBody!.allowsRotation = true
   self.addChild(blueBall)
    blueBall.zPosition = 2



    backgroundImage = SKSpriteNode(imageNamed: "backgroundImage.png")
    self.addChild(backgroundImage)
    backgroundImage.zPosition = 0
    backgroundImage.anchorPoint = CGPoint(x: 0.5, y: 0.5)
    backgroundImage.size.height = self.size.height
    backgroundImage.size.width = self.size.width
    backgroundImage.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame))


    let backgroundTexture = SKTexture(imageNamed: "backgroundImage.png")


    let shiftBackground = SKAction.moveByX(-backgroundTexture.size().width, y: 0, duration: 9)
    let replaceBackground = SKAction.moveByX(backgroundTexture.size().width, y:0, duration: 0)
    let movingAndReplacingBackground = SKAction.repeatActionForever(SKAction.sequence([shiftBackground,replaceBackground]))

    for var i:CGFloat = 0; i<3; i++ 

        let background = SKSpriteNode(texture: backgroundTexture)
        background.position = CGPoint(x: backgroundTexture.size().width/2 + (backgroundTexture.size().width * i), y: CGRectGetMidY(self.frame))
        background.size.height = self.frame.height
        background.runAction(movingAndReplacingBackground)


        self.addChild(background)




 






【问题讨论】:

您可能需要显示更多代码,您的缩放模式是什么?还有什么时候创建 backgroundImage 我现在将用更多代码更新我的帖子。 我还注意到您正在使用 imageNamed: "backgroundImage.png",这意味着您很可能没有正确遵守视网膜规则,这也可能是一个问题。您的图像如何包含在您的项目中?它是图集、xcassets 文件还是 xcassets 中的图集? 不,我认为我的 backgroundImage 目前不符合 Retina 规则,并且我的图像包含在 Assets.xcassets 文件夹中。 更新:我的 backgroundImage 不在 Assets.xcassets 文件夹中。所以将图片放入文件夹后,问题就解决了!非常感谢你的帮助! :) 【参考方案1】:

您遇到了图片未正确加载的问题,因此您的号码已关闭。基本上通过加载带有 png 扩展名的 SKSpriteNode(imageNamed: "backgroundImage.png") ,您正在加载实际文件,不符合任何视网膜规则。然后不会调整宽度和高度来处理这种情况。如果您使用 xcassets 文件夹中的图集,它将允许您为所有显示尺寸指定图形,并选择设备支持的正确图形。

【讨论】:

@KnightOfDragon 请你看看我的类似问题,我已经有一段时间了。 ***.com/questions/43072572/…

以上是关于从右到左滚动背景 Swift / Sprite Kit的主要内容,如果未能解决你的问题,请参考以下文章

从右到左滚动文字效果

Swift - 从右到左执行 eguewithidentifier 转换样式

移动按钮从右到左动画iOS - swift

UICollectionView:1 行水平滚动(从右到左),带有来自右侧的新单元格的自定义动画

如何使用 Swift 在文本字段(从右到左)上输入货币格式?

如何使用 Swift 在文本字段(从右到左)上输入货币格式?