[Résolu] Lancer un vase....

Démarré par supersonic_3, 31 Décembre 2009 à 02:51

0 Membres et 1 Invité sur ce sujet

31 Décembre 2009 à 02:51 Dernière édition: 24 Janvier 2010 à 15:41 par yoshi04
Bonjour, j'ai un problème, j'essaie de "lancer un vase"(en fait plus le prendre et le déplacer...)

Voici mon code en events:







Tout fonctionne, quand il rentre dans un mur, le 25 frames de délais reste pris en compte, donc si je le lance collé sur le mur, ça prendra 25 frames, pour qu'il devienne un coeur, je voudrais qu'il se transforme en touchant au mur, ou après qu'il se soit déplacé... Comment pourrais-je faire? Merci!




T'as pensé aussi à te faire un set avec un character portant le vase?
Le problème serait déjà plus simple à solutionner, surtout sur RM. ;)
Signé : Un mec relou

évidemment  :lol: Je ne l'ai juste pas encore fait, le problème consiste seulement dans la collision avec le mur...(ou tout objet solide)




Utilise une animation, c'est peut-être plus compliqué à mettre en
place mais ça a le mérite d'être plus esthétique et de faciliter l'apparition d'events ^^.

Sinon la seule idée à ton problème qui me viens à l'esprit est assez fastidieuse : comparer à l'aide de variable ( selon la direction du héros bien sur ) les types des tiles dans la direction du jet, pour savoir si le vase rencontrera un mur ou autre obstacle à prendre en compte, tel un trou dans le sol, pour gérer la réaction du vase, et le temps d'attente.

Il y a sans doute plus simple mais sur le coup j'vois que ça désolé :P.

    







Le probleme viens de ta page numero 3 à mon avis.

Pour faire un système de collision qui pourra fonctionner , il faut que tu utilise les variables terrain :

Tu attribu un numero de variable terrain sur ton tileset spécial pour le mur (ex : nuemro 1 = mur)
ta page numero 3 devrais je pense ressembler à cela :

Condition : Si le héro regarde à droite
                          Déplacer l'évènement 1 à droite
                           Gestion des variable X(ou X est une nouvelle variable nommé Place de pot) rendre égal à id terrain
                                    Condition : Si Variable X est égal à 1 (avec un sinon)
                                             Attendre 5 frame
                                                 Gestion interrupteur local C Activé
Sinon
             
Attendre 5 frames
             Déplacer l'évènement 1 à droite
                           Gestion des variable X(ou X est une nouvelle variable nommé Place de pot) rendre égal à id terrain
                                    Condition : Si Variable X est égal à 1 (avec un sinon)
                                             Attendre 5 frame
                                                 Gestion interrupteur local C Activé
Sinon
Attendre 5 frames
                          Déplacer l'évènement 1 à droite
                           Gestion des variable X(ou X est une nouvelle variable nommé Place de pot) rendre égal à id terrain
                                    Condition : Si Variable X est égal à 1 (avec un sinon)
                                             Attendre 5 frame
                                                 Gestion interrupteur local C Activé
Sinon
Attendre 5 frames
                          Déplacer l'évènement 1 à droite
                           Gestion des variable X(ou X est une nouvelle variable nommé Place de pot) rendre égal à id terrain
                                    Condition : Si Variable X est égal à 1(avec un sinon)
                                             Attendre 5 frame
                                                 Gestion interrupteur local C Activé
Sinon
Attendre 5 Frames
Gestion interrupteur local C Activé

Et là je pense que cela devrais fonctionner

Merci djipi, mais je comprends pas trop ce que tu veux dire ici:

Citation
Pour faire un système de collision qui pourra fonctionner , il faut que tu utilise les variables terrain :

Tu attribu un numero de variable terrain sur ton tileset spécial pour le mur (ex : nuemro 1 = mur)
ta page numero 3 devrais je pense ressembler à cela :




Supersonic_3--> Dans la base de données, il y a un onglet terrain. Tu peux attribuer un terrain à chacune des cases de ton chipset. Tu peux par exemple donner le terrain "solide" à toutes tes cases solides, ensuite tu peux ainsi détecter si le vase est sur le mur. Mais pour cela il te faudra créer un event invisible qui est lancé en même temps que le vase et qui passe à travers les murs, comme cela, dès que cet event croise une case "solide", tu sauras que le vase peut être brisé :).

Une autre alternative mais qui est à peu près semblable (car toujours avec ce système d'event invisible): Lorsque le héros lance un vase, un event invisible qui peut passer à travers les murs est lancé, même direction, même vitesse. Sauf qu'au lieu de détecter le terrain, tu détectes régulièrement (dans un évènement en processus parallèle par exemple) si les positions x et y du vase et de l'event sont les mêmes. Si elles ne sont pas les mêmes, c'est que l'event a continué alors que le vase a été stoppé par un objet solide: tu peux donc en conclure que le vase doit se briser^^.

31 Décembre 2009 à 20:38 #7 Dernière édition: 31 Décembre 2009 à 20:53 par supersonic_3
Merci, grâce aux explications de ynanome, j'ai fait la méthode de djipi, et le vase éclate SUR le mur comme dans skulltula's amulet, Je crois que je vais modifier la deuxième méthode de ynanome pour tester avant le mur :)

EDIT: La modification fonctionne très bien, en fait, l'objet invisible, par exemple quand je lance par la droite, est une case plus loin, donc c'est lui qui teste et le vase éclate donc à la collision avec le mur et non pas dessus, merci! On en apprend tous les jours  :P