gpt4 book ai didi

macos - GameScene 类中必需的 init 方法

转载 作者:行者123 更新时间:2023-11-30 10:19:49 28 4
gpt4 key购买 nike

我正在学习 swift 并使用 sprite-kit 框架。这些问题对我来说太奇怪了。代码编译并解决了所有错误,但只有当我接受 init 方法的 Xcode 解决方案时,代码才会编译。

建议代码:

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

运行应用程序时,调试解释器会标记 fatal error 所在的行。我不知道如何解决这个错误。我看到了 iOS 的其他 sprite-kit 示例,没有人需要 gameScene 类中的 init 方法,并且默认情况下该类没有 init 方法。我也没有修改 appDelegate 类,并且 GameScene 的属性已初始化。此外,所有类属性都在 didMovetoView 方法中获取值。

这里是类主任:

class GameScene: SKScene, SKPhysicsContactDelegate
{

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

var world : SKNode
var hud : SKNode
var cursor : UInt32 = 0
var Joystick : joystick
var map : Map
var exit : SKSpriteNode
var spriteAtlas : SKTextureAtlas
var player : SKSpriteNode
var playerShadow : SKSpriteNode
var isExitingLevel : Bool
var playerIdleAnimationFrames : [SKTexture] = []
var playerWalkAnimationFrames : [SKTexture] = []
var playerAnimationID : Int = 0; // 0 = idle; 1 = walk
var lastUpdateTimeInterval : NSTimeInterval = 0.0

override func didMoveToView(view: SKView)
{
// Setup your scene here
let myLabel = SKLabelNode(fontNamed:"Chalkduster")
myLabel.text = "Hello, World!";
myLabel.fontSize = 65;
myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));

self.addChild(myLabel)


// Inicio todas las variables de mi juego (nada de método init ni hostias)
backgroundColor = NSColor(red:175.0/255.0, green:143.0/255.0, blue:106.0/255.0, alpha:1.0);
isExitingLevel = false;

// Add a node for the world - this is where sprites and tiles are added
world = SKNode()

// Load the atlas that contains the sprites
spriteAtlas = SKTextureAtlas(named:"sprites")

Joystick.velocity = CGPoint(x: 0, y: 0)

// Create a new map
map = Map()

// Create the exit
exit = SKSpriteNode(imageNamed: "exit")
exit.position = self.map.exitPoint
exit.physicsBody = SKPhysicsBody(rectangleOfSize: exit.size )
exit.physicsBody?.categoryBitMask = CollisionType.Exit;
exit.physicsBody?.collisionBitMask = 0;

// Create a player node
player = SKSpriteNode(imageNamed: "idle_0")
player.position = self.map.spawnPoint;
player.physicsBody?.allowsRotation = false;
player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size )
player.physicsBody?.categoryBitMask = CollisionType.Player;
player.physicsBody?.contactTestBitMask = CollisionType.Exit;
player.physicsBody?.collisionBitMask = CollisionType.Wall;

// Load sprites for player into arrays for the animations
playerIdleAnimationFrames.append(self.spriteAtlas.textureNamed("idle_0"))

playerWalkAnimationFrames.extend([self.spriteAtlas.textureNamed("walk_0"), self.spriteAtlas.textureNamed("walk_1"), self.spriteAtlas.textureNamed("walk_2")])

playerShadow = SKSpriteNode(imageNamed: "shadow")
playerShadow.xScale = 0.6
playerShadow.yScale = 0.5
playerShadow.alpha = 0.4

playerAnimationID = 0;

world.addChild(self.map)
world.addChild(self.exit)
world.addChild(self.playerShadow)
world.addChild(self.player)

// Create a node for the HUD - this is where the DPad to control the player sprite will be added
self.hud = SKNode()

// Add the world and hud nodes to the scene
self.addChild(self.world)
self.addChild(self.hud)

// Initialize physics
self.physicsWorld.gravity = CGVectorMake(0, 0);
}

提前致谢。

最佳答案

我认为问题是,您拥有的唯一初始化程序是所需的 init 方法,因此每次创建类的项目时都会调用它。所以每次都会抛出 fatal error 。您需要声明一个 init() 方法,在其中设置所有属性(我想知道为什么这段代码甚至可以编译)。在此 init 方法中,您还必须通过 super.init() 初始化父类(super class)。那么其他的init函数就不会被调用。但实际上你不能删除这个功能。

必须实现所需的初始化,因为父类(super class) UIView 具有所需的初始化程序。 UIView 的每个子类都必须根据需要实现此初始值设定项。

关于macos - GameScene 类中必需的 init 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661653/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com