Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
237 connectés actuellement
30731974 visiteurs depuis l'ouverture
1952 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
Lambda -
posté le 11/12/2013 à 18:26:55 (15 messages postés)
| | Domaine concerné: Evenement / script Logiciel utilisé: RMXP Bonjour,
Je suis en train de faire une grotte. J'ai essayer les événements communs pour faire un système de lampe. Pas très convainquant !
J'ai dans l'idée de faire ceci:
- un script dans lequel il y a un tableau avec les id des maps qui doivent être noircie.
- mettre ces maps à 255 avant la téléportation
- si le joueur possède une lanterne, si on appuie sur "A" du clavier ou "A" du paddle, utiliser une image 960 x 720 px avec un rond blanc au centre en suivant le héros.
Voila, maintenant, je ne sait pas si c'est faisable, j'aimerais bien découvrir déjà comment faire le tableau.
Je pense que la première étape, ça sera de faire un script au dessus de main. Le renommer Gestion_Lanterne.
Créer la lanterne, l'ajouter dans les inventaire (enfin en base de donnée). Je pense qu'un coffre contiendra la lanterne. A voir si je ne vais pas en profiter pour mettre une jauge
Il faudra régulièrement acheter des recharges de pétrole. Ce sera une amélioration du script initial.
Voila, je veux bien un peu d'aide la dessus.
Merci beaucoup.
|
Cortez -
posté le 11/12/2013 à 21:23:01 (524 messages postés)
| | Tout ce que tu souhaites est réalisable en event.
1- Avant de téléporter le joueur sur une map "sombre" il suffit de
placer la commande "modifier le ton de la map".
2- Un event commun parallèle pour tester l'appui de la touche A.
Tu te sers alors de pictures afin d'afficher une jauge (que tu crée).
3- La jauge doit être lié à une variable qui contient la "quantité"
de pétrole que tu as. Il est aussi possible d'ajouter des icones
près de la jauge afin de dire au joueur combien de baril il lui reste
voire même comme dans un metroid de remplir automatiquement
la jauge si il possède des barils (tout en enlevant 1 baril de l'inven-
taire).
Voici en bref ce qu'il faut faire pour que tout fonctionne comme tu
le souhaites SANS script
|
Lambda -
posté le 11/12/2013 à 21:45:45 (15 messages postés)
| | Non, en évenement c'est trop le bord** !
J'ai essayé, et 1 ça ne fonctionne pas comme je le désire.
Je suis bien plus à l'aise avec de la programmation.
Je pense faire cela :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class LanternPlayer
# INITIALISATION
def initialize
@map_black = [005, 006] #Les maps qui seront à noircir
end
# SELECT
def select
# Si le joueur entre dans une des cartes à noircir
# C'est ici que j'ai besoin d'aide !
end
end
|
Bon, ok, j'ai mis que la base. Maintenant, il faut que je fasse le test entre le tableau et l'endroit ou est le joueur.
Si quelqu'un à une idée. Je suis prenenur.
|
Cortez -
posté le 11/12/2013 à 22:06:54 (524 messages postés)
| | J'ai édité mon message avec les event tous fait. Ya plus qu'a copier.
Pour quelqu'un qui est à l'aise dans le codage, tu demandes de
l'aide pour ça...
M'enfin c'est pas grave, essaye ma solution et si tu t'en sors pas
là au moins tu auras essayé et tu pourras demander l'aide d'un
scripteur.
Sache aussi qu'un script n'est pas la solution à tout, et que les
scripteurs qui voient ta demande ne répondent sans doute pas à
cause du fait que tu peux le faire par toi-même.
|
Dyeel -
posté le 11/12/2013 à 22:54:05 (200 messages postés)
| | Cortez a dit: Sache aussi qu'un script n'est pas la solution à tout, et que les
scripteurs qui voient ta demande ne répondent sans doute pas à
cause du fait que tu peux le faire par toi-même. |
C'est vrai. Et ce que tu demandes, Lambda, est réalisable en event.
Après c'est vrai que niveau rendu ce sera pas aussi bien que ce que permettent les scripts.
Après c'est bien de vouloir te lancer dans le ruby avec des idées, mais les idées ça te suffira pas et je doute que "passer une commande" d'un script que tu veux portera ses fruits. Mais je veux en aucun cas te décourager.
Le truc c'est que dans ton script il faut pas juste gérer une map qui va se noircir, mais aussi chaque lumière, son rayon, son intensité, sa position par rapport à l'écran, etc...
Par contre, tu peux jeter un oeil sur ce projet rmxp, le mec qui l'a fait a codé un système de lumière vraiment joli. Si ça peut te donner une piste...
Mais si tu veux commencer le ruby pour coder ton système, commence par la base, tu n'apprendras que mieux
Bon courage!
|
Lambda -
posté le 12/12/2013 à 06:27:32 (15 messages postés)
| | Oui, bon, alors, vue comme ça j'ai pas été adroit ! En effet !
Non, à l'évent, sauf en dernier recours.
Là ou je pose ma question, en fait j'aurais du dire. Il doit existé une variable pour le player. Je cherche à la répérer dans les scripts et à la tester. Je pourrait afficher à l'écran le contenu de cette variable. Sorte de débug, mais je vais trouver par moi-même !
Ensuite, je pense faire une sorte de scan à tableau. En php c'est un foreach, je cherche l'équivalent en ruby. Mais là encore, à bien y regarder, je vais googoler un peu et ça sera vite trouvé !
Si je comprends bien, du fait de poser une question avec un début de code, c'est qu'on ne sait pas coder. C'est bien malheureux mais ça vous permet de faire le tris. Et c'est parfait !
Merci de votre aide en event, mais là, je n'y songe même plus par ce que ça ne corresponds pas à ma demande. Mais je garde sous le coude au cas ou.
Finalement, le scripting, c'est quand même très sympa. J'aime bien pour le peu que j'ai déjà coder dedans. Il me reste à approfondir.
Ok pour le lien du gars qui a tout coder. Je vais regarder de plus prêt.
Merci.
|
Dyeel -
posté le 12/12/2013 à 12:46:18 (200 messages postés)
| | Citation: Si je comprends bien, du fait de poser une question avec un début de code, c'est qu'on ne sait pas coder. |
C'est pas du tout ce que j'ai voulu dire, désolé!
Sous ruby, tu fais un tableau et tu le parcoures comme ceci :
1
2
3
4
5
6
7
8
9
10
11
12
| tab = []
tab2 = [1, 4, 6]
tab3 = [Sprite.new, Sprite.new]
for element in tab
#tes commandes
end
for spr in tab3
#tes commandes pour les sprites par exemple
end
|
Ensuite pour le joueur, il y a la variable $game_player. Tu as les attributs x, y, screen_x, screen_y entre autres.
Tu peux aussi capturer la position de l'écran : $game_map.display_x et display_y ^^
Rubydoc est très complet, et pour les variables de RM et leurs attributs ($game_player par exemple) tu as le fichier d'aide de RMXP qui est vraiment bien !
|
Lambda -
posté le 12/12/2013 à 13:23:42 (15 messages postés)
| | Effectivement ! C'est ce que j'ai été cherché ce matin sur Stackoverflow
Pour la petite histoire, j'ai retrouvé la trace de cela dans le code du coup. Et c'est là que j'ai compris une chose ! Mon tableau n'étais pas bon.
Ensuite, je pense qu'il manque quelque-chose dans mon code. En effet, rien ne lance la méthode... Du coup, je pense que ça compilera mais qu'il ne se passera rien. Je travaille la dessus maintenant pour faire un code simple, clair, optimisé et propre.
Oui, par ce que voila, j'aime le beau code simple à lire et à reproduire. Et plus c'est simple, plus c'est dépanable. C'est le but ! Si en plus ça sert aux autres, c'est que mieux.
Voyons maintenant ce que ça donne dans le code
Ah voila, je savait bien... Bon, alors j'ai renommé mes maps tel que "Diwa", "Diwa-Grotte-01" et "Diwa-grotte-02". Et là les chiffres ne tiennent plus !
Donc je ais déjà modifier le tableau de sorte que:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class LanternPlayer
# INITIALISATION
def initialize
#Les maps qui seront à noircir
@tMapBlack = ["Diwa-Grotte-01", "Diwa-Grotte-02"]
@heroCurrentMap = hero.current_map
end
# SELECT
def select
# Pour chaque valeur de map à noircir
for @heroCurrentMap in @tMapBlack
if @heroCurrentMap
# Eteindre la map
end
end
end
end
|
Bon, il me reste à tester ce que ça donne, ajouter le noircissement. J'espère que je trouverais.
|
Dyeel -
posté le 12/12/2013 à 16:17:07 (200 messages postés)
| | Je comprends pas bien où tu veux en venir avec ta liste de maps.
Tu as besoin de noircir celle qui est actuellement à l'écran si elle fait partie de ta liste.
Alors plutôt que de rentrer des noms dans un tableau, rentre les ids des maps à noircir et teste en jeu si tu es dans une map dont l'ID est dans le tableau.
Pour obtenir l'ID de la map dans laquelle tu es : $game_map.map_id
Pour tester si c'est dans le tableau, tu utilises @tMapBlack.include?($game_map.map_id)
Puis c'est pour ça que je te disais de commencer par des choses basiques plutôt que par un script de lumières. Pas pour te dire que t'es une bille et que tu sais pas coder, mais pour te dire que tu as des choses à maîtriser avant de te lancer là-dedans.
Une liste rapide :
1
| @heroCurrentMap = hero.current_map |
C'est quoi le "hero.current_map" ? hero c'est une variable locale que tu n'as pas déclarée.
1
| for @heroCurrentMap in @tMapBlack |
Tu vas gérer toutes les maps en même temps sans qu'elles soient à l'écran?
Puis c'est bien de créer une classe LanternPlayer, mais tu as créé quelque part une variable qui va l'instancier?
Si tu veux agir sur un éclairage dans une grotte par exemple, ce sera juste un calque sur ta map à l'écran.
Alors va plutôt modifier les scripts Scene_Map ou Spriteset_Map.
Comprends bien que je dis tout ça pour orienter tes recherches et je ne te dénigre pas donc pas de mauvaise interprétation. =)
|
Lambda -
posté le 12/12/2013 à 17:51:51 (15 messages postés)
| | Oui, c'est justement là ou je voulais en venir
Tu a bien vue sur le fait que j'ai utiliser hero non déclarer pour le moment.
Remarque, j'aurais certainement du me faire un appel de méthode qui me retournais des infos à l'écran. Mais c'est encore possible.
Alors, si je reprends, je casse ce que j'ai fait, en parti. Mais c'est voulue à ce stade. J'aime refaire. Déjà, comment puis-je instancier ma classe ? Oui, là tu va me traité d'abruti. Mais je préfère en passer par là, par petit bon, en sachant exactement ce que je veux faire plutôt que de m'en remettre à du tout fait bêtement.
Et oui, perdu le coup du copier collé et basta. Ce qui m'amuse le plus c'est d'apprendre ! Alors, go, pour l'instanciation.
Je vais devoir créer une def info quelque part. Elle se chargera de me retourner, provisioirement l'id de map sur laquelle on est.
Genre en haut de l'écran un truc du stype:
Id Map : 1
Heros : Nom héros
Je sait, c'est la base. Mais patience, je compte bien apprendre avec ce script et poursuivre ensuite. Mais de grâce, ne te fâche pas
Bon, aller, c'est bien par ce que j'aime bien oniro que je vais en parler hein ! Je me suis taper, déjà en c++ des softs et même de l'embarqué. Mais effectivement le Ruby j'apprends. Ya du mal à ça ?
Bref, on papote; j'aime papoter ! Mais j'aime encore plus apprendre et expérimenté, quitte à me tromper et à refaire.
|
Mack -
posté le 12/12/2013 à 18:04:03 (2310 messages postés)
- - | | Dyeel a dit:
Cortez a dit: Sache aussi qu'un script n'est pas la solution à tout, et que les
scripteurs qui voient ta demande ne répondent sans doute pas à
cause du fait que tu peux le faire par toi-même. |
C'est vrai. Et ce que tu demandes, Lambda, est réalisable en event.
|
Euh ...
Z'êtes au courant que les évents c'est du script, donc que si, les scripts c'est la solution à tout ?
( Comment ça je trolle ? )
Sinon, pour avoir la "variable" du héros pour accéder à l'id de sa map c'est :
$game_player.
Le mieux c'est simplement d'utiliser un tableau contenant l'id de toute les map à noircir, si l'id de la map sur laquelle se trouve le joueur est dans le tableau, tu affiches ta pictures, sinon tu la caches.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
Lambda -
posté le 12/12/2013 à 18:21:45 (15 messages postés)
| | Oui, c'est exactement ça !
Je teste en théorie tout à l'heure. Mais avant je cherche l'instanciation
|
Dyeel -
posté le 12/12/2013 à 18:38:00 (200 messages postés)
| | Mack, tu lui as expliqué exactement ce que je lui ai dis, non? ^^
D'ailleurs, Citation: Z'êtes au courant que les évents c'est du script, donc que si, les scripts c'est la solution à tout ? |
Je suis au courant, mais la nuance, c'est que les events sont beaucoup plus simples à maîtriser que les scripts quand tu connais pas le rgss
Et Lambda, pour l'instanciation c'est, par exemple :
1
| lantern = LanternPlayer.new |
Mais je maintiens que tu devrais chercher les bases plutôt que de foncer dans ce genre de script ! =p
|
Lambda -
posté le 12/12/2013 à 19:02:23 (15 messages postés)
| | Oui, ok, les bases.
Mais c'est quand même les bases du scripting que de scripter
Bon, je pense qu'on va arrêter ce débat là, têtu comme je suis je vais continuer
Citation: Le voleur : Bon, alors, c'est quoi ce coffre là bas ?
Le mage : Il semble protégé par un sceau de scripting amélioré +30.
Le barbare : C'est écris au dessus "Pas touche !".
Le guerrier : C'est marrant mais justement, dans ce donjon, il n'est pas arrivé par hasard ce coffre !
Le voleur : Je peux tenter de le crocheté...
Le mage : Bonne idée !
Le barbare : Je fais le guet.
Le guerrier : Bon, on y va la j'ai une envie pressente de taper du nain.
Le voleur : Une minute, j'essaie de désamorcer le pie...
BOOOOM !
Le barbare : Mer2 j'ai cramé mon pantalon
Le guerrier : Et ma belle hache +25... le manche en bois...
Le voleur : Vos gueules, j'ai plus de cheveux...
Le mage : Moi, avec la robe de l'archi-mage scripting avec instanciation...
Le barbare : Ta gueule ! |
Bref, ça me fais bien rire
Ok, je reprends mon sérieux !
Va pour instancier avec lantern = LanternPlayer.new .
Je teste ça tout à l'heure.
P.S. excuser ma saute d'humour, mais ça m'a fais pensé à ce bon donjon de Naheulbeuk
Edit !!
Bon, je crois que j'ai capter un truc en fait. Un événement sur la carte peut contenir l'appel de la classe... Rofl ! J'aimerais m'affranchir de cela ! Je continue de gratter les bases.
Edit !!
Bonjour,
Alors, j'ai poursuivi mes investigation et simplifier les choses. Du coup, je cherche à afficher depuis la classe elle-même l'ID de la map traversé tel que j'ai mis un event en mode "Paralle Process" avec le code suivant :
1
2
3
4
|
lantern = LanternPlayer.new
lantern.print_map
|
J'ai donc ici créer un objet Lantern, j'ai demander à cet objet de déclencher la méthode print_map. Les noms sont peut-être mal choisis.
Ma classe est épuré, juste pour récupérer les Id et les affichés. Tl que :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class LanternPlayer
# INITIALISATION
def initialize
@id_map_on = $game_player
end
def print_map
print @id_map_on
end
end
|
Il se passe la chose suivante. Quand le jeu démmare, j'ai une boite de dialogue qui apparaît et plus rien n'est possible. Même pas le déplacement. C'étais certainement le but de print. D'ailleurs j'ai des id ressemblant à des 0x... donc des adresses mémoires
Ce qui me fais pensé que 1, l'événement n'est pas bon. 2 Le moyen de récupéré la classe et d'afficher n'est pas bon.
Au moins, j'aurais essayer par moi-même.
Du coup, je me dis la chose suivante : Je vais regarder un script qui affiche un truc à l'écran (genre une jauge) et je vais bien trouver la tout les éléments nécessaires pour déclencher un affichage des id à l'écran sans boite de dialogue.
Sauf que mes recherches ont curieusement abouti. Je voie bien des classes ok, mais rien qui instancie depuis un événement de map
Et là, c'est le drame
Du coup, je reviens demander un peu d'aide pour me mettre sur la bonne piste. Ce qui me manque c'est comment instancier la classe et comment faire l'affichage. Je travaillerais ensuite sur des essais.
Merci de votre aide
|
Mack -
posté le 14/12/2013 à 13:46:52 (2310 messages postés)
- - | | Bah, euh ...
On instancie JAMAIS une classe depuis un évent en faite.
Ça se fait la plupart du temps dans les Scene.
Après, pour ton print $game_player, c'est normal, t'essaie tout simplement d'afficher la classe ton objet $game_player, et donc il t'affiche des truc chelou.
( Et oui, le print ouvre une boite de dialogue dans XP, ils ont changé ça dans Ace, et peut être aussi dans VX, je sais plus )
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
Lambda -
posté le 14/12/2013 à 17:51:19 (15 messages postés)
| | Ok, maintenant; j'y voie plus clair !
Bon, alors c'est pas si compliqué.
Scène, instancie la classe.
Dans le constructeur (ce qui ressemble à initialize) on peut lancer directement les actions
À partir de là, je dois trouver la meilleure façon d'afficher sans boite de dialogue dans le jeu. Et remplir mon tableau selon.
Je pense que j'ajouterais un switch quelque-part pour activé ou non ce debug. Bref, pour l'heure concentrons-nous sur ce que j'ai dis en haut. Instancier la classe et afficher les infos.
Merci beaucoup déjà de ton aide. Comme les autres qui participent. C'est important de le noter mais dans le fond... Il faut impérativement essayer pour évoluer.
Dernier point, au cas ou quelqu'un aurais déjà géré de l'affichage. Quelle serait la meilleure façon de le faire ? Je pensait à print... mais c'est pas la solution à priori.
|
Mack -
posté le 14/12/2013 à 17:58:35 (2310 messages postés)
- - | | Nope, le print sert juste pour faire du débugage.
T'as deux choix en faite, soit tu passes par un bitmap, soit par une fenêtre.
( Sachant que la fenêtre c'est moins compliqué, mais qu'elle même passe par un bitmap. )
Donc perso, j'te conseil de passer par une fenêtre pour afficher tes infos, même si j'ai du mal à voir l’intérêt pour un système de lampe xD.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
Lambda -
posté le 14/12/2013 à 21:42:35 (15 messages postés)
| | Et bien en fait, c'est simple.
Comme j'avais expliqué au début, je vais faire un tableau avec les id pour lequel la lampe est requise.
Si je suis sur une map qui est dans le tableau, C'est noir.
Si j'appuie sur A et que je possède la lampe, un halo suit le héro tant qu'il a du pétrole dans la lampe.
Si il n'y a plus de pétrole le décors sera noir.
En fait, c'est simple. Mais je me voie mal mettre dans le tableau toto, si il faut affiché titi et que ça doit se déchanché quand y a gros miné.
En d'autres terme, je teste d'abord toutes les conditions avant de les programmé. Ceci évitant d'un de se tromper pendant le codage. Ensuite d'avoir des valeurs qui seront comparable par comparaison. Tu a déjà comparé un âne avec un hypopotame ?
Voila le but. Maintenant, je ferais un truc simple.
Passer par la boite de dialogue print, uniquement si il y a un appuie sur le bouton A. Ainsi ça ne sera plus bloquant.
Voyons donc comment mettre ça en oeuvre !
Déjà, la capture du bouton, et l'affichage du print avec l'id de la map. Et non des choses incohérentes comme expliqué en haut.
|
Cortez -
posté le 15/12/2013 à 11:10:03 (524 messages postés)
| | Promis après ce message, j'arrête ^^
En évent tu aurais déjà fini et continué ton projet...
Pour info, si RmXP (et les autres) existent, c'est pour permettre
la création de jeu sans connaitre le codage. Là tu fait exactement
le contraire, et j'ai l'impression que tu veux faire tout ton jeu avec
du code. ça va être extra long et pas forcément pratique.
Soit tu est calé en codage dans un autre language (cf ta
présentation). Mais si tu veux progresser en ruby, essaye les
compileurs ruby qui ne t'obligent pas à connaitre toute les classes
de rmXP. C'est bien ce que tu fais, mais pour avoir déjà essayé de
faire quelques scripts, il faut mieux se contenter de modifier ceux
qui existent déjà et de petit à petit en comprendre la mécanique.
Après tu fait comme tu veux, je suis pas là pour gueuler si tu
m'écoute pas (en fait je l'ai un peu fait ) c'est juste mon
point de vue sur ta situation.
|
Dyeel -
posté le 15/12/2013 à 18:45:27 (200 messages postés)
| | Dans le constructeur de ton script :
1
2
3
| @sprite = Sprite.new #tu crées un sprite
@sprite.bitmap = Bitmap.new(640,32) #tu lui donnes un bitmap
#bitmap de largeur 640 et de hauteur 32, suffisant pour afficher une ligne |
Dans une méthode d'affichage de ton script :
1
2
3
4
| @sprite.bitmap.clear # tu vides le bitmap avant de le réécrire.
#Ca évite de superposer les écritures à chaque instant.
@sprite.bitmap.draw_text(0,0,640,480,$game_map.map_id.to_s)
#tu as dessiné le texte à l'écran : l'id de la map où tu es actuellement, converti en string (to_s) |
| Index du forum > Entraide > [RMXP] Lanterne ? Grotte ?
|
|
|