Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Game Maker Discussion :

Petit problème de variable


Sujet :

Game Maker

  1. #1
    Candidat au Club
    Petit problème de variable
    Bonjour avant tout merci de lire ce message c'est sympa.
    Je développe (du-moins j'essaye) un jeu 2d type galaga sur un logiciel du nom de game maker.
    voilà mon problème:
    Par défaut l'objet qui sert de projectile se détruit sur l’ennemie et donc j'ai eu pour idée de crée un bonus pour faire en sorte que le projectile se détruise pas j'usque la tous va bien (en apparence). j'ai donc crée un variable qui en défini quand mon player apparait (à chaque début de partie), cette variable est défini comme fausse par le player.
    Le projectile lui test si cette variable et si elle est fausse il est sensé se détruire (en théorie). Ensuite le bonus lui défini cette variable comme vrai et au bout d'un certain laps de temps il redéfini la variable comme fausse.

    Mon problème est que dès que le projectile touche un ennemie j'ai un message d’erreur qui me dit que la variable à testé n'est pas défini (j'ai bien vérifié les écritures)

    voilà si vous avez un peu de temps à m’accorder ce serait super sympa

    encore merci

  2. #2
    Responsable 2D/3D/Jeux

    Bonjour,

    Ainsi (je veux dire, sans le projet), cela sera dur de déterminer la cause. C'est bien d'avoir vérifier les écritures. Par contre, est-ce que la variable est définie au bon endroit ? (c'est à dire, de manière à ce quelle soit utilisable dans le projectile). Cela semble que la variable devrait être globale.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Candidat au Club
    suite
    merci de ta réponse,

    Comme tu la dit et j'ai omis de le précisé j'ai bien fait en sorte que le variable soit défini avant d’être tester, j'ai aussi essayer de faire une variable globale mais même résultat. La seule hypothèse que j'ai c'est que la variable est défini au début de chaque partie mais le projectile n'est pas encore créé il ne doit donc pas la prendre en compte.

  4. #4
    Expert confirmé
    Citation Envoyé par LittleWhite Voir le message
    Cela semble que la variable devrait être globale.
    On en a pendu pour moins que ça.
    Play50HZ, le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  5. #5
    Membre éclairé
    Citation Envoyé par Flof_le francais Voir le message
    un bonus pour faire en sorte que le projectile se détruise pas j'usque la tous va bien (en apparence).
    Donc il ne se détruit pas ?
    Citation Envoyé par Flof_le francais Voir le message
    Le projectile lui test si cette variable et si elle est fausse il est sensé se détruire (en théorie)
    Et ça, ça marche ?
    Citation Envoyé par Flof_le francais Voir le message
    Ensuite le bonus lui défini cette variable comme vrai et au bout d'un certain laps de temps il redéfini la variable comme fausse.
    Le projectile existe toujours ?

  6. #6
    Candidat au Club
    suite
    Dès que le projectile (sans avoir activer le bonus) touche un ennemi j'ai immédiatement le message d'erreur donc non ça ne marche pas.

    le code que j'ai écrie est [if sniper=false{instance_destroy()} et pour définir la variable j'ai utiliser le logiciel (le bouton set variable) et j'ai aussi essayer de le déclarer par du script sous cette forme [sniper=false]

    enfin dans mon bonus j'ai mis un event qui doit set la variable [sniper=true] quand le bonus s'active et j'ai mis une alarme qui remet la variable en "normal" [sniper=false]

    de toute facon je n'ai pas réussi à activer le bonus car le message d'erreur est avant.

    j’espère être concis j'ai du mal à expliquer les choses.


  7. #7
    Membre éclairé
    Tester morceau par morceau aiderait à la compréhension du problème.
    -Tester le fait que le projectile reste bien en vie après l'impact.
    -L'alarme, lancée à l'impact pour s'assurer du bon fonctionnement
    -La variable sniper déclarée à true dès la création du projectile
    -...

  8. #8
    Candidat au Club
    peut être la fin
    Comme on me la dit précédemment j'ai testé "morceaux par morceaux" et j'ai eu une idée qui à permis de résoudre mon problème.

    j'ai crée des projectiles différent de ceux deux base (mais avec le même sprite) et dans l’exécution du tir par le joueur j'ai doubler les lignes et fait en sortes d'intégré les nouveaux objets.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    if canfire=true{
     
    if Doublefire=true{
     
    if bullettype=1{bullet=instance_create(x-20,y-20,Small_bullet)}
    if bullettype=2{bullet=instance_create(x-20,y-20,Basic_bullet)}
    if bullettype=3{bullet=instance_create(x-60,y,Big_bullet)}
     
    bullet.speed=20
     
    if randomfire=false {bullet.direction=90}
    if randomfire=true{
    fireaxe=irandom_range(180,0)
    bullet.direction=fireaxe}
    }
    if bullettype=1{bullet=instance_create(x+20,y-20,Small_bullet)}
    if bullettype=2{bullet=instance_create(x+20,y-20,Basic_bullet)}
    if bullettype=3{bullet=instance_create(x+60,y,Big_bullet)}
     
    bullet.speed=20
     
    if randomfire=true{
    fireaxe=irandom_range(180,0)
    bullet.direction=fireaxe}
     
    if randomfire=false {bullet.direction=90}
     
    canfire=false
     
    if Firerate=1{
    alarm_set(0,10)
    }
    if Firerate=2{
    alarm_set(0,15)
    }
    if Firerate=3{
    alarm_set(0,50)
    }}


    ci-dessus c'est l'original et ci-dessous le nouveaux pas optimisé mais fonctionnelle

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    if sniper=false{
    if canfire=true{
     
    if Doublefire=true{
     
    if bullettype=1{bullet=instance_create(x-20,y-20,Small_bullet)}
    if bullettype=2{bullet=instance_create(x-20,y-20,Basic_bullet)}
    if bullettype=3{bullet=instance_create(x-60,y,Big_bullet)}
     
    bullet.speed=20
     
    if randomfire=false {bullet.direction=90}
    if randomfire=true{
    fireaxe=irandom_range(180,0)
    bullet.direction=fireaxe}
    }
    if bullettype=1{bullet=instance_create(x+20,y-20,Small_bullet)}
    if bullettype=2{bullet=instance_create(x+20,y-20,Basic_bullet)}
    if bullettype=3{bullet=instance_create(x+60,y,Big_bullet)}
     
    bullet.speed=20
     
    if randomfire=true{
    fireaxe=irandom_range(180,0)
    bullet.direction=fireaxe}
     
    if randomfire=false {bullet.direction=90}
     
    canfire=false
     
    if Firerate=1{
    alarm_set(0,10)
    }
    if Firerate=2{
    alarm_set(0,15)
    }
    if Firerate=3{
    alarm_set(0,50)
    }}}
     
    /// zone sniper acivé
     
    if sniper=true{
    if canfire=true{
     
    if Doublefire=true{
     
    if bullettype=1{bullet=instance_create(x-20,y-20,Small_bullets)}
    if bullettype=2{bullet=instance_create(x-20,y-20,Basic_bullets)}
    if bullettype=3{bullet=instance_create(x-60,y,Big_bullets)}
     
    bullet.speed=20
     
    if randomfire=false {bullet.direction=90}
    if randomfire=true{
    fireaxe=irandom_range(180,0)
    bullet.direction=fireaxe}
    }
    if bullettype=1{bullet=instance_create(x+20,y-20,Small_bullets)}
    if bullettype=2{bullet=instance_create(x+20,y-20,Basic_bullets)}
    if bullettype=3{bullet=instance_create(x+60,y,Big_bullets)}
     
    bullet.speed=20
     
    if randomfire=true{
    fireaxe=irandom_range(180,0)
    bullet.direction=fireaxe}
     
    if randomfire=false {bullet.direction=90}
     
    canfire=false
     
    if Firerate=1{
    alarm_set(0,10)
    }
    if Firerate=2{
    alarm_set(0,15)
    }
    if Firerate=3{
    alarm_set(0,50)
    }}}


    voilà je sais pas je doit mettre résolu mais en tous cas ça marche pour moi.