Heures au format UTC + 1 heure [ Heure d’été ]




Publier un nouveau sujet Répondre au sujet  [ 3 messages ] 
Auteur Message
 Sujet du message: Jouer à 2 sur un clavier (en event/script)
MessagePublié: 07 Sep 2010, 08:06 
Membre royal très actif
Avatar de l’utilisateur

Inscrit le: 21 Déc 2006, 01:00
Messages: 1201
Niveau RPG Maker: Plutot bon!
Logiciel(s) préféré(s): Euh...devinez ;) (et XP j'aime pas VX)
Point(s) Fort(s): Event,et jme debrouille pour le reste^^
Sexe: Masculin
Points d'aide: 14/60

Créations :

- [add-on mode7] deplacement avec pivot


Voir ses créations

Voici un petit tuto qui vous apprendra comment gérer deux joueurs sur une même map, un qui sera le héros de base de rmxp et l'autre un évent que l'on aura garni de commandes!

Si vous ne shouaitez pas apprendre quelque chose mais simplement utilisez ce tuto, il est tout à fait possible de sauter la partie I! (exit la démo^^)

I/ la théorie
♦Déjà, la demo!
http://www.megaupload.com/?d=GIU2YPU6

♦Ensuite, regardons le second joueur, comme tout les évents de ce tuto, il est en processus parallèle!
Image

En langage français on à:
La variable $vic prend la valeur de l'ID de cette évènement (ici 1, mais parfois non^^)
L'interrupteur Go est activé (utile pour éviter un ptit bug, si les autres évènements s'activent avant que la variables $vic ai pris la bonne valeur, y'a un problème)
si il n'y a pas de message et que l'evenement d'ID $vic ne bouge pas alors:
-si la touche Z est préssé, l'event va vers le haut
-si la touche Q est préssé, l'event va vers la gauche
-si la touche S est préssé, l'event va vers le bas
-si la touche D est préssé, l'event va vers la droite


et voila! notre petit évent bouge grâce aux touches ZQS et D!

♦ Maintenant, débrouillons nous pour que nos deux héros puissent interagir avec les pnjs!
Image

on stock le code de la touche appuyée dans une variable
si on appuie sur la touche A
-si le héros est sur la case au dessus de l'event
--si il regarde vers le bas
--sauter vers l'etiquette A

(etc pour les autres directions et pour le héros principal)


voila, si le héros ou le second joueur est bien placé, alors on saute vers l'etiquette A! la voici:
Image

Si il se passe quelque chose d'impossible (pour eviter que il n'y ai le message à chaque tour de l'event c'est à dire à chaques frames...ici j'ai mis "si un interrupteur est désactivé et activé en meme temps" mais faites vous plaisir, vous pouvez mettre "si 1 est égale à 2" ou n'importe quoi x) )
l'etiquette A (donc en mettant "aller vers etiquette A", l'event se lira depuis ce point)
Ce que vous voulez, ici un message (c'est la seule chose à changer d'un event à un autre, je l'ai mis en valeur par des commentaires^^)
et ensuite on rétablit la direction de l'event


♦ Maintenant, un ptit bonus, des monstres qui se baladent et agressent^^
Image

Cette fois, on a de la détection de zone, sa fait:
si le héros est à moins de 5-6 cases du fantôme, alors ce dernier avance vers lui
sinon, si le second joueur est à moins de 5-6 case du fantôme, alors ce dernier s'avance vers le second joueur

Si le héros est au CaC du fantôme, alors on saute vers l'etiquette 1
sinon, si le second joueur est au CaC du fantôme, alors on saute vers l'etiquette 1


Le reste de l'event marche de la meme façon que la fin de l'event des pnjs (on remplace le message par un combat et supprime le changement de directions)
pensez à suprimer l'event aprés le combat!

II/ les scripts

Le script de regard, crée un nouveau script au dessus de main:
Code: Tout sélectionner
# appelez ce script en tapant "regard( l'id de l'event)"
# l'event concerné se tournera vers le second personnage

class Interpreter 
   def regard(id)
    d = ($game_map.events[id].x - $game_map.events[$vic].x).abs
    h = ($game_map.events[id].y - $game_map.events[$vic].y).abs
    $game_map.events[id].turn_right if d >= h and $game_map.events[id].x < $game_map.events[$vic].x   
    $game_map.events[id].turn_left if d >= h and $game_map.events[id].x > $game_map.events[$vic].x
    $game_map.events[id].turn_down if d < h and $game_map.events[id].y < $game_map.events[$vic].y
    $game_map.events[id].turn_up if d < h and $game_map.events[id].y > $game_map.events[$vic].y
   end
end


(l'explication est dedans)

Pour que le second joueur puisse passer les messages, une ptite modif:

ligne 237 de Window_Message, remplacez:
Code: Tout sélectionner
if Input.trigger?(Input::C)

par:
Code: Tout sélectionner
if Input.trigger?(Input::C) or Input.trigger?(Input::X)


Scripts de différentes commandes utilisés dans ce tuto:
Code: Tout sélectionner
=begin

Pour se servir de "stocker le code de la touche appuyée dans ..."

(FLECHE BAS) ==> 2
(FLECHE GAUCHE) ==> 4
(FLECHE DROITE) ==> 6
(FLECHE HAUT) ==> 8
Z ou (SHIFT) ==> 11
X , 0 ou (ECHAP) ==> 12
C , (ENTRER) ou (SPACE) ==> 13
A ==> 14
S ==> 15
D ==> 16
Q ou (DEFIL HAUT) ==> 17
W ou (DEFIL BAS) ==> 18

pour détection de zone:
condition si:
Math.sqrt(($game_map.events[@event_id].x-$game_player.x)**2+($game_map.events[@event_id].y-$game_player.y)**2) <= 10 (10 à changer)
______________________________
pour comparer x,y event et héros:
condition si:
$game_player.x == ($game_map.events[@event_id].x)-1 and $game_player.y == ($game_map.events[@event_id].y)-1 (-1 à changer et parenthèse enlevable)
______________________________
pour mettre en condition, si il n'y a pas de messages:
$game_temp.message_window_showing == false
______________________________
pour mettre en condition, si l'event d'id $vic (le personage secondaire) ne bouge pas:
not $game_map.events[$vic].moving?

=end


III/ la pratique

L'event du second héros: est à copier\coller sans rien changer^^

les Pnjs: Changer uniquement apparence, type de déplacements et ce qu'il y'a entre les grandes barres vertes^^

Les monstres: J'ai pas mis de grande barre verte, mais le principe est le même
de plus, dans les conditions script commençant par "math", vous pouvez changez le dernier chiffre pour modifiez la zone.
en changeant le 6 des deux premières conditions, vous changerez le champ de vision du monstre (quand il commencera a vous courir après)
en changeant le 1 des deux conditions après, vous changerez la distance que doit séparer monstre et héros pour une aggro

Changement de Map: C'est trés rare, mais il peut y'avoir un bug si vous ne désactivez pas l'interrupteur Go avant d'arriver sur une nouvelle map. (en clair, pendant une fraction de seconde, les ennemis se tromperons peut être entre l'event incarnant le second joueur et n'importe quelle autres, quelques fractions de secondes suffisant au lancement d'un combat x) )
faite simplement:
interrupteur "Go" désactivé
teleporter équipe vers blablabla...

IV/ autre
Je vais ptet rajouter un event pour pouvoir interagir entre les deux héros, (à la army of two x) ) mais normalement si vous avez compris les commandes scripts c'est facile à faire à partir des events de pnjs

merci de votre lecture et désolé si je fait des fautes ou suis pas assez clair x)

EDIT: merci!^^

_________________
Adoptez votre Arshes! :D

_________________


5 PA donné(s) par Bahamut 1.2 le 07 Septembre 2010


Dernière édition par slyp05 le 07 Sep 2010, 21:34, édité 2 fois au total.

Haut
 Profil  
 
 Sujet du message: Re: Jouer à 2 sur un clavier (en event/script)
MessagePublié: 07 Sep 2010, 10:17 
Garde
Garde
Avatar de l’utilisateur

Inscrit le: 26 Sep 2006, 00:00
Messages: 1973
Points d'aide: Illimité

Créations :

Voir ses créations

Enfin un vrai tuto qui n'est pas une liste d'instructions.
Rien que pour ça, c'est largement meilleur que la moyenne, et pour le reste ça m'a l'air clair. Ca reste simple mais je trouve que ça mérite quelques PA, je m'en charge après (et les tutoriels sont tellement rares).

Juste une remarque, tu utilises la touche X pour que le second joueur passe les messages, or il me semble que cette touche représente toutes les touches d'annulation (X, echap, 0 pav.numérique) donc il pourrais y avoir des conflits.

Merci de ta contribution.

_________________
Image
Image


Haut
 Profil  
 
 Sujet du message: Re: Jouer à 2 sur un clavier (en event/script)
MessagePublié: 07 Sep 2010, 11:34 
Membre VIP
Membre VIP
Avatar de l’utilisateur

Inscrit le: 27 Oct 2006, 00:00
Messages: 1187
Niveau RPG Maker: Correct
Logiciel(s) préféré(s): XP
Point(s) Fort(s): Aucune spécialité
Sexe: Masculin
Points d'aide: 54/60

Créations :

Voir ses créations

Et non, c'est la touche "B" qui gèrent X, 0, Ins, et Echap.
C'est un tuto assez intéressant, mais comme les évents deviennent plus dur à gérer, je doute que beaucoup de monde l'utilise.
Néanmoins, c'est toujours un bon tuto =P.

_________________
Sihara : Démonstration Technique


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 3 messages ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 5 invités


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728