Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 activation d'un interrupteur pour ouvrir une porte

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
mikeen2d
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?


Nombre de messages : 27

Age : 32

Localisation : Montpellier

Date d'inscription : 05/09/2010


MessageSujet: activation d'un interrupteur pour ouvrir une porte   Ven 10 Sep 2010 - 15:42

Bonjour ! ça va faire quelque jour que je suis bloqué sur le script et j'ai une erreur que je n'arrive pas à résoudre seul .
(Sans doute aviez vous du faire cette erreur aussi)
donc je commence par l'animation d'un interrupteur .
On click dessus (le perso n'est pas obligé d'aller devant l’interrupteur pour l'appuyer)

voici ce qui se passe en image :

1) j'appuis sur l'interrupteur



2) l'interrupteur passe au vert mais j'ai la possibilité de le faire repasser au rouge également et là problème , le minuteur s'enclenche et le jeux se bloque



voici la partie technique , j'explique comment j'ai fait mon anim et je vous montre le script.

J'ai crée 2 views de bouton: une c'est le bouton rouge qui passe au vert et l'autre c'est le bouton vert qui passe au rouge.
J'ai crée 2 objet superposé (et là je me dis que c'est de là que ça cloche) , un bouton vert et un bouton rouge .
Comme pour le principe de la porte quand on clique sur le bouton rouge , l'animation démarre et l'objet du bouton rouge disparais pour laisser place au bouton vert.

jusque là tout fonctionne . Alors je me dis "cool je vais faire pareil sens inverse":
J'appuis sur le bouton vert (et pim ça me met en attente comme là photo ci-dessus) l'animation se declenche , mon bouton vert disparais et le bouton rouge réapparais.





Je comprend pas pourquoi ça me met en attente alors que j'ai dis "eOnce" et de toute les manière je n'ai plus d'animation le jeux attend qu'avec le temps peut être l'usure de la décoloration du vert passe au rouge ...

le bouton rouge n’apparaît pas et le vert ne disparais pas .

========================================================================================================

Pour la suite j'aimerais qu'en activant ce bouton , la porte qui au début était verrouillé se déverrouille.
J'entend par là que le joueur ne peux pas ouvrir la porte -"tiens la porte est fermé"- et qu'il doit appuyer sur ce bouton pour la déverrouillé -"tiens j'ai entendu un bruit de serrure la porte doit être ouverte maintenant"- .

Et là j'ai mal au crane je prend une aspirine .

J'ai tenté un " portef.close" mais apparemment ça existe pas ...

Et en regardant mon script je me suis dis , faut que j'efface toute la partis concernant la porte et que je l’intègre à la fonction de l'interrupteur .
Mais on peut pas mettre de fonction dans une fonction si ?
genre :

fonction bouton_Interract()
{
//si j'appuis sur le bouton la porte se déverrouille
fonction portef_Interract()
//la porte s'ouvre
}
}
Il me semble que j'ai vu un tuto dessus mais j'ai cherché et il a du me passer sous le nez.

Je suppose que je dois créer une global variable boleenne stipulant que la porte f au début est bloqué ( mais on peux toute fois la toucher et le joueur s'exclame "oh c'est fermé")
puis un condition if je touche le bouton la porte se déverrouille et inversement if je retouche le bouton le porte se verrouille.

Pour l'instant je tiens à preciser que je n'ai rien , pas d'histoire en tete ou de jeux à vouloir vous montrer.
Mais si je dois commencer à m'y mettre,
je fais ça avant tout pour bien me familiarisé et avoir une base solide pour pouvoir faire, qui sait, plus tard, une petite histoire au pays des tasses bleues (fake)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
-a-timburton-a-
Cliqueur Emérite
Cliqueur Emérite


Nombre de messages : 588

Date d'inscription : 17/05/2010


MessageSujet: Re: activation d'un interrupteur pour ouvrir une porte   Ven 10 Sep 2010 - 15:59

Rien a voir mais; j'aime beaucoup le design de ton bonhomme.

Tu peux utiliser une petite varible, je ne connais que la booléene.

tu vas dans "Gloobal variable" "add new variable", et tu en choisit une en "bool"

nomme la genre "Vinterrupt"

Apres utilise la pour ton interrupteur et si tu appuie dessus ça la met en "true" et si c'est en "true" bah la porte s'ouvre.

j'ai la flemme de détailler, désolé ^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Crazy Legs
Grand Cliqueur Royal
Grand Cliqueur Royal


Nombre de messages : 1513

Age : 23

Localisation : La Rochelle

Date d'inscription : 09/01/2008


MessageSujet: Re: activation d'un interrupteur pour ouvrir une porte   Ven 10 Sep 2010 - 16:04

Salut !

mikeen2d a écrit:
Mais on peut pas mettre de fonction dans une fonction si ?

Tu peux mettre des appels de fonctions, comme dans ton exemple. C'est d'ailleurs ce que tu fais tout le temps avec les commandes SetView() et Animate() notamment.

Après il y a un petit problème dans ta démarche. Tu utilises deux views alors qu'une seule suffit et de plus dans tes fonctions bouton_Interact() et bouton1_Interact() il y n'y a qu'un appel que de la view 5.
Ce qu'il faut que tu fasses c'est utiliser deux loops d'une view ; et s'il n'y a pas d'animation graphique genre fondu entre l'instant rouge->vert tu peux carrément mettre une loop avec 2 frames.

T'es dans quel cas ?

_________________
VOUS POURREZ BIENTÔT RÉAPPRENDRE À UTILISER AGS SUR LE SITE DU ZÉRO !
Le tuto est actuellement en refonte totale activement depuis le 20 juillet, prochaine sortie en août ou septembre si tout se passe bien.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mikeen2d
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?


Nombre de messages : 27

Age : 32

Localisation : Montpellier

Date d'inscription : 05/09/2010


MessageSujet: Re: activation d'un interrupteur pour ouvrir une porte   Sam 11 Sep 2010 - 10:00

-a-timburton-a- a écrit:
Rien a voir mais; j'aime beaucoup le design de ton bonhomme.

--> j'en avais marre de voir la bouilli pixelisé de Roger j'ai voulu un truc un peu plus présentable lol mais c'est fait rapidement si je dois me lancer dans un jeux je ne prendrais pas ce perso .

pour ces frame ci dessus mon animation fais ça : 1 2 3 2 4 5 6 5 4




Crazy Legs a écrit:
Après il y a un petit problème dans ta démarche. Tu utilises deux views alors qu'une seule suffit et de plus dans tes fonctions bouton_Interact() et bouton1_Interact() il y n'y a qu'un appel que de la view 5.
Ce qu'il faut que tu fasses c'est utiliser deux loops d'une view ; et s'il n'y a pas d'animation graphique genre fondu entre l'instant rouge->vert tu peux carrément mettre une loop avec 2 frames.

T'es dans quel cas ?

J'en suis là justement Xp

J'ai créer une view du nom de bouton avec mes de loop :
loop 0 bouton qui passe du rouge au vert
loop 1 bouton qui passe du vert au rouge



Puis après j'ai crée 2 objets :
1 bouton rouge et un bouton vert appelé respectivement :
bouton et bonton1

dans ma fonction j'appelle donc bien la view 5 et la loop qui va en fonction .

Ou alors je dois creer une view à part ?

Au début je voulais que mon animation s’arrête à la 4eme frame comme ça j'aurais pas eu à créer l'objet bouton vert .Mais apparemment c'est pas possible .
D'où le 2eme objet et la loop 1.

Je sais pas si on me comprend ...
Et mon problème donc c'est que l'animation de la fonction bouton1_interact ne fonctionne pas et "freeze" le jeux .
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Crazy Legs
Grand Cliqueur Royal
Grand Cliqueur Royal


Nombre de messages : 1513

Age : 23

Localisation : La Rochelle

Date d'inscription : 09/01/2008


MessageSujet: Re: activation d'un interrupteur pour ouvrir une porte   Sam 11 Sep 2010 - 12:46

OK, donc je te propose de supprimer tes deux objets et d'en créer un seul oBouton (n'oublie pas d'effacer leurs évènements).
Tu as donc une seule view avec deux loop, une loop animation rouge->vert et une autre vert->rouge, OK. (je te conseille de renommer ta view vBouton).

Dans l'event Interact de oBouton tu mets :

Code:
function oBouton_Interact()
{
if(oBouton.Frame == 0) oBouton.SetView(5, 0, 0);
else if(oBouton.Loop == 0) oBouton.SetView(5, 1, 0);
else oBouton.SetView(5, 0, 0);

oBouton.Animate(oBouton.Loop, 5, eOnce, eBlock);
oBouton.SetView(oBouton.View, oBouton.Loop, Game.GetFrameCountForLoop(oBouton.View, oBouton.Loop)-1);
}

_________________
VOUS POURREZ BIENTÔT RÉAPPRENDRE À UTILISER AGS SUR LE SITE DU ZÉRO !
Le tuto est actuellement en refonte totale activement depuis le 20 juillet, prochaine sortie en août ou septembre si tout se passe bien.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mikeen2d
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?


Nombre de messages : 27

Age : 32

Localisation : Montpellier

Date d'inscription : 05/09/2010


MessageSujet: Re: activation d'un interrupteur pour ouvrir une porte   Sam 11 Sep 2010 - 14:43

effectivement ça marche et je te remercie mais là je suis perdu si je résume donc ta fonction ça veux dire :

function oBouton_Interact()
{
if(oBouton.Frame == 0) oBouton.SetView(5, 0, 0); // si les frame du bouton sont pareil que 0 alors on lui attribue la view 5 loop 0 delay 0 ?
else if(oBouton.Loop == 0) oBouton.SetView(5, 1, 0); // sinon si la loop du bouton est pareil que 0 (je comprend rien ) alors on lui attribue la view 5 avec la loop 1 delay 0...
else oBouton.SetView(5, 0, 0);// sinon c'est pareil que la première ligne ?

oBouton.Animate(oBouton.Loop, 5, eOnce, eBlock);// on anime le bouton ( mais pourquoi oBouton.loop ?)
oBouton.SetView(oBouton.View, oBouton.Loop, Game.GetFrameCountForLoop(oBouton.View, oBouton.Loop)-1);// alors là ça deviens du chinois : euuuh on attribue au bouton la view ( oBouton.View, oBouton.Loop, blablabla -1 oO ?

ma façon de faire te plaisais pas ? xP c’était un peu plus simple mis a part le bug lol

Non sans rire si tu pouvais juste m'expliquer ta démarche

dans l'aide d'ags il dise que GetFrameCountForLoop est une variable statique (int = numerique c'est bien ça ?)
formulé apres par GetFrameCountForLoop(int.view,int.loop) ...

Enfin bref je nage dans les choux je suis vraiment désolé ... :pleure:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Crazy Legs
Grand Cliqueur Royal
Grand Cliqueur Royal


Nombre de messages : 1513

Age : 23

Localisation : La Rochelle

Date d'inscription : 09/01/2008


MessageSujet: Re: activation d'un interrupteur pour ouvrir une porte   Sam 11 Sep 2010 - 15:05

Pas grave, honnêtement le but c'est que ça fonctionne, peu importe la méthode mais moi j'aurais fait comme ça.

Les 3 premières conditions te permettent de gérer les cas de ton animation :

Loop 0 : rouge->vert.
Loop 1 : vert-> rouge.

On vérifie donc Loop, si c'est 0 on lance 1 sinon on lance 0.
Cependant, la première fois que tu cliques sur le bouton, la view et donc la loop n'ont pas été défini, ils valent donc 0, et si on clique sur le bouton quand la loop vaut 0, ça lance l'animation 1, nous on veut lancer l'animation 0, donc il faut trouver une différence entre le premier appuie et les autres cas, ayant donc comme point commun la loop à 0.
J'ai trouvé une différence, j'ai choisi de vérifier la frame de la loop, comme la view, la loop et donc la frame ne sont pas défini au premier clic et donc valent 0, cela est différent des autres cas, car une fois que la view est défini et une des deux animations est lancée, j'ai définit, après l'animation, que la dernière frame de la loop devait être l'image du bouton :

Code:
oBouton.SetView(oBouton.View, oBouton.Loop, Game.GetFrameCountForLoop(oBouton.View, oBouton.Loop)-1);

Pour trouver la dernière frame de la loop, j'utilise donc Game.GetFrameCountForLoop(), le -1 est indispensable, car dans une view, les ID des frames débutent comme tout à l'indice 0, donc pour 10 frames, la dernière frame aura pour indice 9, d'où le -1.

Pour en revenir donc à la condition Frame == 0, elle permet de vérifier si on clique sur le bouton une première fois ou non, si c'est la première fois, la view n'est pas définit donc Frame vaut 0, sinon, la view est définit et Frame vaut l'ID de la dernière frame, donc Frame est différent de 0.

Le else oBouton.SetView(5, 0, 0) est certes identique à la première ligne sauf que ici on VEUT changer l'animation, pas dans la premier cas.

Je ne pense pas avoir été clair, mais sache juste que c'est pas compliqué, c'est juste que c'est une méthode différente et plus simple mais qui demande quelques outils.

EDIT : SetView() ne permet pas uniquement d'assigner une view, mais aussi une loop et/ou la frame de la loop, c'est de cette manière que je change l'image du bouton en utilisant Game.GetFrameCountForLoop(), qui me permet non pas d'assigner une nouvelle view mais une nouvelle frame.

Code:
if(oBouton.Frame == 0) oBouton.SetView(5, 0, 0);
else if(oBouton.Loop == 0) oBouton.SetView(5, 1, 0);
else oBouton.SetView(5, 0, 0);

//ÉQUIVAUT A :

if(oBouton.Loop == 0) // Rouge->Vert
{
  if(oBouton.Frame == 0) // Premier clic
  {
      oBouton.SetView(5, 0, 0); // ON LANCE LA PREMIÈRE ANIMATION
  }
  else
  {
      oBouton.SetView(5, 1, 0); ON LANCE LA SECONDE ANIMATION
  }
}
else // Vert->Rouge
{
oBouton.SetView(5, 0, 0); ON LANCE LA PREMIÈRE ANIMATION
}

//ÉQUIVAUT A :

if(oBouton.Frame == 0 || oBouton.Loop != 0) oBouton.SetView(5, 0, 0);
else oBouton.SetView(5, 1, 0);

// Ça c'est compliqué ^^ mais ça fonctionne aussi.

_________________
VOUS POURREZ BIENTÔT RÉAPPRENDRE À UTILISER AGS SUR LE SITE DU ZÉRO !
Le tuto est actuellement en refonte totale activement depuis le 20 juillet, prochaine sortie en août ou septembre si tout se passe bien.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
mikeen2d
C'est quoi la Tasse Bleue ?
C'est quoi la Tasse Bleue ?


Nombre de messages : 27

Age : 32

Localisation : Montpellier

Date d'inscription : 05/09/2010


MessageSujet: Re: activation d'un interrupteur pour ouvrir une porte   Sam 11 Sep 2010 - 16:02

Ok j'ai saisi le principale et je trouve que tu explique très bien je t'en remercie .

je vais faire un test avec autre chose pour bien comprendre .

Je t'avoue quand même que la programmation me pique les yeux surtout quand on en a jamais fais , heureusement que vous êtes là pour conseiller ,
et que lorsque vous conseillez , vous le faites tous de manière calme et explicite .
Je sais pas si vous avez fais gaffe sur certain forum qui se disent "pédagogue" mais si on a le malheur de se planter , on se fais incendier et du coup ça lasse car on n'ose plus rien dire .

Je fais toujours mon possible pour me débrouillé seul en cherchant dans vos aides du forum déjà formulé ou dans l'aide d'ags , donc si une info me passe sous le nez je tiens à m'excuser d'avance .

merci Crazy pour ton aide en tout cas.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
-a-timburton-a-
Cliqueur Emérite
Cliqueur Emérite


Nombre de messages : 588

Date d'inscription : 17/05/2010


MessageSujet: Re: activation d'un interrupteur pour ouvrir une porte   Sam 11 Sep 2010 - 18:16

N'aie crainte.

Ici nous acceptons tous problèmes, moi j'ai fait un joli topic juste pour une erreur d'inattention ^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: activation d'un interrupteur pour ouvrir une porte   Aujourd'hui à 8:02

Revenir en haut Aller en bas
 
activation d'un interrupteur pour ouvrir une porte
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» activation d'un interrupteur pour ouvrir une porte
» [évent]Rentrer un code pour ouvrir une porte [résolue]
» Comment ouvrir cette porte?
» demande d'accès
» comment avoir nelly raimon dans inazuma eleven 3 the ogre

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: