Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SWIFT] numParticlesToEmit ne fonctionne pas

https://developer.apple.com/documentation/spritekit/skemitternode/1398

    12 novembre 2017 à 17:32:10

    Bonjour !

    Ca fait quelques jours que je bloque sur un problème pas si grave, mais ca devient vraiment embêtant de pas comprendre !

    Pour faire simple, je crée un petit jeu sous Swift 4, à l'aide du SpritKit d'Apple.

    J'ai donc mes différents SKEmitterNode dans des fichiers .sks et je fais le lien de ces fichiers dans mon code via cette ligne :

    private let emtSpark = SKEmitterNode(fileNamed: "particleSpark.sks")!

    Puis je l'affiche à l'aide d'un 

    self.addChild(emtSpark)

    Jusqu'ici aucun problème, par contre quand je change le nombre de particule à émettre via l'inspecteur ou via la fonction :

    emtSpark.numParticlesToEmit = 100

    Et là plus rien ne s'affiche ... !

    Des idées ?

    (y) Merci



    -
    Edité par sonizef 14 novembre 2017 à 14:16:12

    • Partager sur Facebook
    • Partager sur Twitter
    The happiness is real only when shared
      13 novembre 2017 à 18:39:28

      Quelqu'un avec un petit indice ? :ange:
      • Partager sur Facebook
      • Partager sur Twitter
      The happiness is real only when shared
        13 novembre 2017 à 20:47:49

        Salut !

        le parametre numParticulesToEmit est le nombre total de particule a emettre !

        Si tu fixe ce parametre a 100, alors lors-ce que l'emitter a émit 100 particules, il s'arrete !

        Si tu ne veux pas qu'il s'arrete, ne touche pas a ce parametre (laisse le a zero)

        Si ce que tu comptais faire etait de creer plus de particules par secondes, alors utilise plutot particleBirtRate !

        • Partager sur Facebook
        • Partager sur Twitter
        Tutoriels sur GameplayKitSceneKit (iOS 3D game engine), ARKit (iOS réalité augmentée) en cours d'écriture
          14 novembre 2017 à 13:50:39

          Salut ! 

          Merci pour ta réponse :)

          En fait je veux faire une explosion, et si je ne limite pas le nombre de particule mon explosion continuera ... D'ailleurs sur l'éditeur de particule quand je limite mon nombre ça fait exactement l'effet désiré ...

          Après je sais qu'il y'a moyen de contourner ça en mettant par exemple un timer de 0.5sec et de mettre mon emitter en pause au-dela de ce délais, mais j'aurai préféré utilisant la fonction simplement créée pour ;)

          Edit : Ah oui d'ailleurs, j'ai essayé de faire un resetSimulation() justement, je m'étais dit qu'il devait émettre des particules sans que je puisse les voir (pour je ne sais quelle raison d'ailleurs) mais évidemment ça n'a pas fonctionné :/

          -
          Edité par sonizef 14 novembre 2017 à 13:51:53

          • Partager sur Facebook
          • Partager sur Twitter
          The happiness is real only when shared
            14 novembre 2017 à 13:59:51

            Alors peut etre, peut tu t'inspirer de ce code, c'est un generateur d'explosion en fonction d'une certaine intensitée :

            extension SKEmitterNode {
            	public static func explosion(intensity: CGFloat) -> SKEmitterNode {
            		let emitter = SKEmitterNode()
            		let particleTexture = SKTexture(imageNamed: "spark")
            		emitter.zPosition = 2
            		emitter.particleTexture = particleTexture
            		emitter.particleBirthRate = 4000 * intensity
            		emitter.numParticlesToEmit = Int(400 * intensity)
            		emitter.particleLifetime = 2.0
            		emitter.emissionAngle = .pi / 2
            		emitter.emissionAngleRange = .pi * 2
            		emitter.particleSpeed = 600 * intensity
            		emitter.particleSpeedRange = 1000 * intensity
            		emitter.particleAlpha = 1.0
            		emitter.particleAlphaRange = 0.25
            		emitter.particleScale = 1.2
            		emitter.particleScaleRange = 2.0
            		emitter.particleScaleSpeed = -1.5
            		emitter.particleColorBlendFactor = 1
            		emitter.particleBlendMode = .add
            		
            		let sequence = SKKeyframeSequence(capacity: 5)
            		
            		sequence.addKeyframeValue(SKColor.white, time: 0)
            		sequence.addKeyframeValue(SKColor.yellow, time: 0.10)
            		sequence.addKeyframeValue(SKColor.orange, time: 0.15)
            		sequence.addKeyframeValue(SKColor.red, time: 0.75)
            		sequence.addKeyframeValue(SKColor.black, time: 0.95)
            		
            		emitter.particleColorSequence = sequence
            		
            		emitter.run(.removeFromParentAfterDelay(2.0))
            		
            		return emitter
            	}
            }

             ca creer un systeme de particule qui explosent et se supprime automatiquement apres deux secondes

            -
            Edité par giantwow 14 novembre 2017 à 14:05:31

            • Partager sur Facebook
            • Partager sur Twitter
            Tutoriels sur GameplayKitSceneKit (iOS 3D game engine), ARKit (iOS réalité augmentée) en cours d'écriture
              14 novembre 2017 à 14:15:50

              J'ai essayé ton bout de code sauf pour cette ligne 

              emitter.run(.removeFromParentAfterDelay(2.0))

              mais dans le principe ça fonctionne de cette façon !

              Du coup je me demande si le problème ne vient pas du fichier *.sks ...

              Parce que sur un autre projet, lorsque je créer mon emitter en code, sans l'import d'un SKS et que je modifie numParticlesToEmit ça fonctionne également 

              • Partager sur Facebook
              • Partager sur Twitter
              The happiness is real only when shared

              [SWIFT] numParticlesToEmit ne fonctionne pas

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown