etxra-Parameter in init Funktion einer abgeleiteten Klasse nicht erreichbar

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Macoun 2019 - Frühbucherrabatt endet morgen

  • etxra-Parameter in init Funktion einer abgeleiteten Klasse nicht erreichbar

    Hallo zusammen!
    Jetzt, wo mein Mac ausnahmsweise mal funktioniert, kann ich fleißig weiter Swift lernen (und ich muss da scheinbar noch viel lernen) und bin direkt auf ein neues Problem gestoßen.

    Ich hoffe, jemand kann helfen:

    Ich habe diese Klasse von SKSpriteNode abgeleitet:
    Es geht mir darum, einen Konstruktor mit dem zusätzlichen Parameter "ParentScene" zu haben.

    Wenn ich einneues Objekt zuweisen möchte, wird dieser Parameter jedoch nicht angezeigt. Händisches Eintrag bringt die Meldung: "Extra argument "parentScene" in call"

    Aufruf:

    Quellcode

    1. let Krone = scene.childNode(parentScene: scene, withName: "Krone1") as TouchableSpriteNode

    Klasse:

    Quellcode

    1. class TouchableSpriteNode : SKSpriteNode
    2. {
    3. var Scene: SKScene?
    4. init(withName: String, parentScene: SKScene) {
    5. let texture = SKTexture(imageNamed: withName)
    6. super.init(texture: texture, color: SKColor.clear, size: texture.size())
    7. Scene = parentScene
    8. }
    9. required init?(coder aDecoder: NSCoder) {
    10. fatalError("init(coder:) has not been implemented")
    11. }
    12. override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    13. for touch in touches {
    14. let position = touch.location(in: Scene! )
    15. self.position.x = position.x
    16. self.position.y = position.y
    17. }
    18. }
    19. }
    Alles anzeigen

    Danke für die Mühen mit einem blutigen Anfänger :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Manuel Lammers ()

  • Mac & i Test Abo
  • Auch auf die Gefahr, mich wahnsinnig zu blamieren (ja, ich habe Swift noch immer nicht gelernt):

    Für mich sieht Dein Code oben so aus, aus würdest Du nur per Methode childNode:withName der Szene zugreifen und den gefundenen Knoten dann stumpf auf TouchableSpriteNode casten. Das heisst aber noch lange nicht, dass dieser eine Instanz der Klasse TouchableSpriteNode ist. Letztlich ist die verwendete Methode ja gar kein Initializer.

    Du müsstest also beim Instanzieren Deine eigene Klasse verwende, dann hat die oben referenzierte Instanz auch ein Property ParentScene. An dem Aufruf Methode chilNode zum Finden der Instanz ändert sich dadurch erst einmal nichts. Es sei denn, Du würdest diese überschreiben und den zusätzlichen Parameter einführen.

    Sorry, wenn das verworren klang, schieb's auf die Hitze, Mattes

    ... bei 32°C in seinem Arbeitszimmer
    Diese Seite bleibt aus technischen Gründen unbedruckt.