Après avoir vu certains poste à propos du SKSpriteKit, j’ai voulu m’y mettre aussi, mais je bloque un peu hélas.
J’ai créé une SpriteKit View dans mon ViewController.
J’ai créé une scène SKScene.
J’ai associé ma scène .sks à ma SpriteKitView (Attributes Inspector / SpriteKit View / Scene).
J’ai créé un fichier Cocoa Touch Class avec comme sous-classe SKScene.
J’ai ensuite associé mon fichier swift à ma scène dans Custom Class Inspector / CustomClass.
Ma scène est assez simple : 4 murs et une balle qui est censée rebondir indéfiniment.
Ma SKSpriteKitNode as “ball” comme nom dans l’Attributes Inspector.
Et voici le code de mon fichier .swift associé à ma scène :
import SpriteKit
class GameOne: SKScene {
let ball = SKSpriteNode(fileNamed: "ball")
let vectorBall = CGVector(dx: 1000, dy: 1000)
override func sceneDidLoad() {
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
ball?.physicsBody?.applyImpulse(vectorBall)
}
}
Mais rien n’y fait, cette satané balle ne veut pas bouger.
Par contre si j’applique une “Initial Velocity” à partir de l’Attributes Inspector de ma balle, tous fonctionne correctement.
Où se situe le problème ? Dans la déclaration de ma propriété “applyImpulse” ou dans la gestion de mes classes ?
J’ai pas essayer avec différentes gravité mais j’ai essayer de passer ma balle de alpha = 1 à alpha = 0 et rien ne se passe.
Hélas il y as tous mon code la ahah !
La seule chose qui manque c’est : mavue.present(ma_scene) qui se situe dans mon ViewController directement aprés le viewDidLoad parce-que je veux qu’elle sois présenté directement.
J’esayerais de changer la gravité ce soir, merci de te réponse !
Qu’est ce que tu entend par “donner un SKPhysicBody” ?
Est-on obliger de déclarer un PhysicBody dans la classe ? Je pensais que les réglages fait à partir du StoryBoard suffisait.
Surtout que si je met une initiale velocity, la balle agit correctement.
J’ai fait un print “touchbegan” et celui ci est bien afficher dans ma console, mais mon “applyImpulse” est quand même ignoré …
N’ayant plus Xcode installé sur ma machine, je ne peux essayer ton code. Cependant je pense que tu n’as pas compris la manière d’utiliser un objet SpriteKit du Storyboard.
let ball = SKSpriteNode(fileNamed: "ball")
Cette ligne ne crée pas un lien vers l’objet « ball » définis dans le Storyboard. C’est même le contraire, elle génère un nouveau SpriteNode dans la mémoire, forcément invisible puisque tu ne le places pas sur l’écran.
Pour récupérer un lien vers un objet du Storyboard, il faut utiliser la fonction childNode(withName:).
Elle retourne un SKNode. Il faut le caster en SKSpriteNode pour l’utiliser. De mémoire le code ressemble à ça :
let ball = nodeParent.childNode(withName:"ball") as? SKSpriteNode
Là, tu devrais récupérer un objet optionnel utilisable (null si le nom donné n’existe pas).
Merci beaucoup de ta réponse, tu m’as débloqué la situation !
Il faut vraiment que je travail l’anglais pour complètement comprendre la docu d’Apple par contre. =/
Tu sais, on peut se débrouiller sans connaître l’anglais. Je fais un blocage psychologique sur ce sujet, et je suis incapable de me débrouiller dans la langue de Shakespeare. Google traduction est ton ami, même pour la documentation d’Apple.
Ceci dis, c’est vrai que si j’arrivais à passer ce stupide blocage, ma vie serait plus simple.