Aller à la page 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
Reprise du message précédent:
Grim -
posté le 23/12/2014 à 14:31:22 (251 messages postés)
| | Le soucis qu'évoque Nagato Yuki concernant le Range, c'est qu'on instancie un "objet Range" pour l'itération, alors qu'un itérateur classique x.upto/times/step est "mieux". Ce qui "objectivement" ne change rien car on parcourt, dans les deux cas, un Enumerator et qu'une somme est, en terme de calcul de complexité, négligeable.
Donc je suppose que la question de Nagato Yuki a été due au fait que mon ton semblait peremptoire et prétentieux, et il m'a gentiment remit à place Je l'ai bien mérité.
|
http://funkywork.github.io/ | Suite du sujet:
Nagato Yuki -
posté le 23/12/2014 à 15:08:46 (351 messages postés)
| | @Grim : J'avais légèrement modifié mon message pour faire en sorte à ce que ça ne passe pas comme une affirmation de ce que t'aurait fait (au niveau de la taille) c'est raté x)
Pour les Hash, ce que je comprend pas c'est pourquoi utiliser un Hash plutôt qu'un Array parce que le Hash c'est vraiment pour associer une clef à une valeur et utiliser des uniquement nombres en tant que clef ça n'a juste pas de sens sauf dans le cas où tu veux éviter la génération d'un tableau de 20ko pour 3 valeurs ce qui est tout à fait compréhensible.
Si je devais utiliser un Hash ça serait de cette manière :
1
2
3
4
5
6
| def nyanya(arg1, arg2, special_args={})
#blablabla
end
#...
nyanya(1, 2, delta_x: 1, delta_y: -1, autre_arg_spe: "Salut")
# nyanya(1, 2, :delta_x => 1, :delta_y => -1, :autre_arg_spe => "Salut") si la version de ruby ne prend pas en charge le style d'écriture présenté |
Ou pour stocker des informations hyper dynamiques n'ayant aucune raison d'avoir leur propre classe.
Le gros problème c'est la définition d'une valeur "constante" non statique dans le corps de la fonction plutôt que dans une constante. Ça pousse simple Ruby à générer ton Hash à chaque fois que t'appelles la fonction alors qu'en réalité c'est pas non plus nécessaire :
1
2
3
4
5
| 0004 getinlinecache 11, <ic:0>
0007 getconstant :Hash
0009 setinlinecache <ic:0>
0011 opt_send_simple <callinfo!mid:new, argc:0, ARGS_SKIP>
0013 setlocal_OP__WC__0 3 |
Sinon, les opérateurs ternaires sont en effet pas plus lisibles mais dans mon cas ils ont vraiment un sens, faire une opération simple de vérification mais après, c'est pas la peine de se plaindre de la lisibilité de la chose, c'est encore assez lisible et compréhensible de n'importe qui, j'aurais pu vous écrire :
1
| add_x=(if(d==6);1 elsif(d==4);-1 else;0 end) |
Ruby comprend exactement la même chose sauf que c'est imbuvable
Si j'utilise les opérateurs ternaires c'est que je ne traite que très peu de cas, que je n'ai pas envie d'alourdir le code de conditions imbriqués les unes dans les autres pour faire la même code qu'en quelques caractères avec un ternaire et/ou que j'ai besoins de faire une opération sur des objets statiques avec accessoirement des calculs.
Exemple : http://puu.sh/dGoLM/b8c3c7ca2e.png
Sans ternaires ce machin risque d'être vachement lourd pour pas grand choses.
@Joke : Voici la fonction set_direction de RMVX.Ace :
1
2
3
4
5
6
7
8
| #--------------------------------------------------------------------------
# ● 指定方向に向き変更
# d : 方向(2,4,6,8)
#--------------------------------------------------------------------------
def set_direction(d)
@direction = d if !@direction_fix && d != 0
@stop_count = 0
end |
Maintenant, je vais te montrer pourquoi ça ne va pas trop bien :
1
2
| $game_player.set_direction(2.0)
passable_on?(6) #=>NoMethodError : undefined method `[]' for nil:NilClass |
1
2
| $game_player.set_direction(2.0)
arrow_tile_travelable #=> 6 car 2.0==2 revoie true |
Après, ce que je viens d'écrire là c'est carrément tiré par les cheveux, le mec qui fait $game_player.set_direction(2.0) devrait s'acheter une corde.
Cela dit, Joke, je suis plus pour ta solution écrite de la manière suivante :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| class Game_Interpreter
Bilou = [[0, -1, 1, 0], [1, 0, 0, -1]]
def arrow_tile_travelable(max = 6, character = $game_player)
d = character.direction
d2 = d/2-1 #Il faut conserver le d pour que GameMap#passable? retourne bien la bonne valeur
x = character.x
y = character.y
add_x = Bilou[0][d2]
add_y = Bilou[1][d2]
1.step(max) do |i|
x+=add_x
y+=add_y
return i-1 unless ($game_map.passable?(x, y, d) or $game_map.terrain_tag(x,y)==5) and !character.collide_with_characters?(x,y)
end
return max
end
end |
Sinon, pour en venir au Ranges, c'est un mauvais truc qui sort de Python, utiliser des ranges pour "a".."z", si ça t'amuses fais le, perso je vois pas l'utilité, par contre 1...max c'est d'une connerie. Déjà le newbie qui lit ça ne comprends pas ce que ça veut dire parce qu'entre ".." et "..." y'a pas la même chose et après Ruby n'agit pas de la même manière en voyant "a.step(b, optional_increment)" qu'en voyant a..b. (Il se passe une étape supplémentaire). Bref, ceci est un avis personnel, je proscrit les ranges de mes scripts car ils ne servent absolument à rien en dehors de l'énumération de strings.
PS : Mon message est long du coup j'ai du oublier des choses ou j'ai pas été très clair, faut que j'ailles faire mon anglais de toute manière '^'
Sachez juste que je pense pas pareil et que quand j'écris du Ruby, je vois ce qui se passe derrière car c'est un langage interprété.
Edit : Je viens de voir le message de Grim. Gentiment remis en place plus ou moins, après, je mérite aussi d'être remis en place, je m'exprime d'une manière assez ingrate (en relisant mes messages) après j'expose mon avis, quand je vois certaines "Guidelines" pour la programmation Ruby, je fais certains trucs qui sont considérés comme mauvais mais chacun sa façon de programmer, Ruby est l'ami de développeur :P
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Grim -
posté le 23/12/2014 à 16:18:06 (251 messages postés)
| | Je comprend mieux ton point de vue. Concernant l'usage d'un Hash, c'est en partie en raison des guidelines, qui thématisent sur l'indexation que j'ai décidé d'en utiliser un, mais je suppose qu'en "bas niveau", on a une différence sensible. Et que je n'ai pas d'indexation continu mais par rupture. Cependant, pour la définition "statique" (même si je n'aime pas ce terme, qui est une erreur de conception initialement), tu as raison. Ces derniers mois j'ai été amené à lire le code source de Pharo (un smalltalk en particulier) et la préinterpretation éradique ces imperfections, je ne suis pas sur que ce soit le cas avec Ruby... (il faudrait demander à Mspawn ou Nuki qui ont lu le code source de Ruby).
Pour les ranges; je pense que c'est une structure conventionnelle, qui n'oblige pas à raisonner l'itération sur l'entier mais sur une structure réellement énumérable. Mais c'est un partit prit. Je préfère tout de même utiliser l'intervalle plutot que le "for" qui n'a aucun sens "objet" et introduit des complexité au niveau des erreurs d'existence : for x in 7 => method_missing sur each.
Mais bon, on se prend beaucoup la tête pour peu
Citation: Après, ce que je viens d'écrire là c'est carrément tiré par les cheveux, le mec qui fait $game_player.set_direction(2.0) devrait s'acheter une corde. |
Rien ne vaut un véritable typage statique :P
|
http://funkywork.github.io/ |
zeus81 -
posté le 23/12/2014 à 19:47:04 (11071 messages postés)
| | Citation: Ruby n'agit pas de la même manière en voyant "a.step(b, optional_increment)" qu'en voyant a..b. (Il se passe une étape supplémentaire). |
Quitte à avoir un incrément de 1 autant utiliser upto, et puis même ici ça sert à rien vu que t'utilises même pas la valeur de i telle quelle, tu lui soustrais 1, autant faire max.times do dans ce cas.
|
Nagato Yuki -
posté le 23/12/2014 à 21:01:33 (351 messages postés)
| | @Zeus : En effet, chose à la quelle j'ai absolument pas pensé en écrivant le code. Cela dit, faudrait que je pense à utiliser upto/downto dans mes codes, c'est plus signifiant que step dans la plupart des cas.
@Grim : Ruby ne fait quasiment aucune optimisation, surtout sur les vieilles versions. Si tu lui dit de faire un truc, il le fait dans la mesure du possible sans te remettre en question... Sauf au moment où ça plante *fuit*
Ex : http://puu.sh/dGKvP/6bdffa615d.png
En gros, vaut mieux savoir quand t'écris/corrige le code ce que Ruby va réellement faire pour bien optimiser ton application selon ce que tu désires comme optimisation. (Flexibilité ou vitesse voir les deux).
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Grim -
posté le 23/12/2014 à 22:29:57 (251 messages postés)
| | Je n'ai pas vraiment compris ton exemple (qui dans mon esprit n'a aucun sens , et aucun rapport avec une optimisation futile) :/
|
http://funkywork.github.io/ |
Nagato Yuki -
posté le 23/12/2014 à 23:34:39 (351 messages postés)
| | C'est pas de l'opti, c'était pour montrer que Ruby t'obéissait au doigt et à l'œil ce qui fait qu'en effet ruby n'optimise rien dans ton code. (Ou presque, il a quand même la présence d'esprit de pré-évaluer certaines situations)
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Joke -
posté le 26/12/2014 à 17:47:27 (5090 messages postés)
| Bilouteux fou | Citation:
1
2
| #Use automatic popup? Can be enabled/disabled in game, see examples
$PU_AUTOMATIC_POPUP = true |
|
à priori, tu peux à tout moment faire une insertion de script pour faire "$PU_AUTOMATIC_POPUP = true" ou "false" pour activer ou désactiver le pop-up.
|
biloumaster.fr, mon joli site ouèb tout bô tout frai ! |
spyrojojo -
posté le 26/12/2014 à 19:28:08 (773 messages postés)
| schizophrène avec tendance cleptomane a votre service | Support : RMVX Ace
Probléme : Je souhaite adapter un de mes événement commun en script (juste pour m’entraîner ^^)
Donc je souhaite faire apparaître une certaine images sur ma map (jusque la facile)
1
2
3
4
5
6
7
8
9
| class Scene_Map < Scene_Base
def start
create_Picture
end
def create_Picture
@sprite = Sprite.new
@sprite.bitmap = Cache.system("Interface")
end
end |
Mais cette image (dont l'id est inconnue au passage ^^) s'affiche sur toute les maps ^^
comment je peu faire pour que cette image ne s'affiche que sur les map que j'ai choisi? (j'avais penser a afficher une certaine formule dans le nom de la map comme pour le mode7)
Je n'utiliserais pas forcément ce script sur mon projet (car j'ai aussi 3 commandes du script Display-text à afficher). Mais ça me trotte depuis un moment dans la tête et j'ai envie de rebidouiller un peu des scripts ^^.
|
Mes projets : Fall, Délirium | Mes scripts : BGM et BGS dans le menu | Mon deviantart |
7163D -
posté le 27/12/2014 à 16:11:32 (946 messages postés)
| Votez Minimaliste | La map en cour est stocké dans $game_map.
Donc si dans le script Game_Map tu rajoute
1
2
3
4
5
6
|
class Game_Map
attr_reader :map_id
#[...]
end
|
Tu transforme alors ton code:
1
2
3
4
5
6
7
8
9
| class Scene_Map < Scene_Base
def start
create_Picture if $game_map.map_id == 10154845
end
def create_Picture
@sprite = Sprite.new
@sprite.bitmap = Cache.system("Interface")
end
end |
Je n'ai pas essayé, mais ça devrait marcher.
|
Minimaliste, le "." comme signe de ralliement. |
Nagato Yuki -
posté le 27/12/2014 à 17:01:09 (351 messages postés)
| | Je pense qu'il voulait plus avoir un truc moins chiant à gérer en utilisant le nom interne de la carte pour faire ça.
Je peux te proposer un truc plus simple pour gérer ça :
Dans les propriétés de la carte il y a un joli endroit où tu peux mettre des notes, c'est accessible directement via le data de la map contrairement à son nom interne qui est paumé dans MapInfo et qui est relativement chiant à utiliser donc tu peux faire ce truc là :
Et si je ne me trompes pas dans Spriteset_Map tu peux mettre dans initialize :
Juste après create_timer
Et juste avant update
Une fois cela fait tu crée une méthode create_image dans la classe Spriteset_Map contenant ceci :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
TagDaffichageDimage="[afficher_limage]"
ImageInterface="Interface"
def create_image
#>Récupération de la map
map_data=$game_map.instance_variable_get(:@map)
#>Vérification de la présence du tag d'affichage de l'image dans les notes
if(map_data.note.include?(TagDaffichageDimage))
#>On crée le sprite dans le bon viewport au dessus de tout
@sprite_lxvz = Sprite.new(@viewport2)
@sprite_lxvz.z = 10_000 #On s'assure qu'il est au dessus de toutes les images
#>On charge l'image
@sprite_lxvz.bitmap = RPG::Cache.system(ImageInterface)
end
#>Sinon le sprite n'est pas crée :b
end |
PS : Le nom de la variable est différent car je n'ai pas vérifié si il y avait une variable qui portait ce nom dans Spriteset_Map donc j'ai généré une fin de nom aléatoire
Pour toute les maps où tu veux que l'image soit affiché, si les scripts fonctionnent bien t'as juste à coller [afficher_limage] dans les notes et ça s'affichera.
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
spyrojojo -
posté le 28/12/2014 à 13:21:47 (773 messages postés)
| schizophrène avec tendance cleptomane a votre service | En grand merci a vous 2 , je vais m'amuser a faire quelque test
|
Mes projets : Fall, Délirium | Mes scripts : BGM et BGS dans le menu | Mon deviantart |
Nofake91 -
posté le 30/12/2014 à 15:01:44 (82 messages postés)
| | Support : RMVX Ace
Question : Modifier la position du "Game Over"
Je me sers d'un script qui permet d'agrandir la fenètre du jeu lorsque l'on joue, mais à cause de celui-ci le Game Over n'est plus du tout centré !
Comment puis-je régler la position du Game Over ?
|
Tout le monde souhaite être riche... Moi je souhaite que tout le monde soit pauvre... |
spyrojojo -
posté le 30/12/2014 à 18:06:16 (773 messages postés)
| schizophrène avec tendance cleptomane a votre service | a défaut de chercher a recentré l'image du game over , tu a penser a redimensionner directement l'image a ta nouvelle résolution ?a moins que tu souhaite tout de même le faire en script ^^ (mais la je laisse ma place , je sais pas faire ^^)
|
Mes projets : Fall, Délirium | Mes scripts : BGM et BGS dans le menu | Mon deviantart |
Nofake91 -
posté le 30/12/2014 à 18:33:00 (82 messages postés)
| | J'y ai pensé à redimensionner l'image mais je préfèrerais effectivement le faire en script^^
Personne ? J'vais ptètre redimensionner l'image alors...
|
Tout le monde souhaite être riche... Moi je souhaite que tout le monde soit pauvre... |
Slime55 -
posté le 04/01/2015 à 19:58:26 (442 messages postés)
| | Support : RMVX Ace
Question 1 :
J'ai changé auparavant le nombre de personnages que je voulais dans un combat, mais maintenant après y avoir un peu réfléchi, je trouve que ce n'est pas ce nombre là que je veux. J'aimerais donc savoir où se trouve la ligne de code qui peut changer cela, merci d'avance !
PS : j'ai le souvenir que c'était ce genre de truc-là " GAME_ACTOR_LIMIT = 4" mais même après avoir passé au peigne-fin tous les scripts de mon jeux, je ne trouve cette ligne nulle part. ça m'aiderait beaucoup si quelqu'un savait exactement où elle se trouvait !
Résolu
|
Slime55 -
posté le 04/01/2015 à 20:10:04 (442 messages postés)
| | Ah merci beaucoup ! ça fait un moment que je cherchais, j'avais presque abandonné ...
|
bigbru -
posté le 06/01/2015 à 13:03:43 (16 messages postés)
| | Bonjour,
Je me suis renseigné sur comment importer des script sur RPG Maker VX Ace mais celui-ci ne marche pas et du coups je viens prendre conseil auprés de vous pour savoir si j'ai bien fait l'import du script comme il faut.
Pour l'import je suis allé dans Outils -> Editeur de scripts -> Materials et j'ai créé une entrée où j'ai copié/collé le contenu du fichier de scripts fourni dans le pack que j'avais acheté (voir image).
Concernant le fichier de script j'ai remarqué que celui avait plusieurs classes au cas où ça pourrait avoir une incidence.
Le script est celui du pack Mythos Horror et est censé avoir le fonctionnement suivant ( que je n'ai pas constaté d'où ma question) :
"It helps alleviate a problem with larger character events. By default, any character over 32 pixels high would get cut off by any tile designated as being above the player (* in the editor). This script helps by making the character event not get cut off when lower on the Y axis on the screen. Further, if a character event or the player moves behind a large tile designated with a * in the editor, they will turn transparent. This way you will never lose track of your character or character sprites."
Merci d'avance,
Bru
|
| | Bonjour à tous !
Support : RMVXace
Question 1 :
En combat, comment ne pas afficher à l'écran les infos (nom, HP... En fait toute la fenêtre) des personnages ?
Question 2 :
Toujours en combat, comment mettre la fenêtre de choix (attaque, magie, etc) au centre de l'écran ?
Merci d'avance !
EDIT: Finalement, j'ai décidé de tout faire en événements.
EDIT DU 28/01/2015:
Support : RMVXace
Question : RESOLU
Dans mes notes, j'ai écrit que, pour augmenter le nombre d'images affichables en même temps à l'écran,
il suffit de remplacer:
for i in 0..20 par for i in 0..100
Mais con comme je suis, je n'ai pas noté où c'est. Quelqu'un peut m'aider ?
|
Apprenez la programmation à vos enfants avec SCRATCH (PC) |
Mack -
posté le 27/01/2015 à 23:06:21 (2310 messages postés)
- - | | Game Map sans doute.
Mais sinon tu fais une recherche inter script ( CTRl + Maj + F je crois ), et tu colles ton:
Dans la boite de recherche ^^.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
| | Je ne connaissais pas le coup de la recherche, merci bien !
Sinon, ma question était vraiment conne puisque 100 est la limite de base.
Ce mémo devait être pour une autre version... J'ai dû prendre un sacré coup de vieux !
Désolé pour le dérangement.
|
Apprenez la programmation à vos enfants avec SCRATCH (PC) |
Kwala -
posté le 31/01/2015 à 22:12:18 (68 messages postés)
| Simple makeur. Mais c'est déja ça. | Bonjour !
Je ne suis pas débutant en script, mais je ne suis pas un maître (comme Zeus que nous vénérons tous) et je voudrais savoir comment faire en sorte que le héros monte d'un niveau, grâce à une ligne de script. Il y a-t-il moyen de faire ça ?
|
Mon histoire interactive : https://amethysts.itch.io/coalescence |
7163D -
posté le 01/02/2015 à 14:30:02 (946 messages postés)
| Votez Minimaliste | Juste monter de niveau
1
2
3
|
$game_party.members[n].level_up
|
Donner juste l'xp nescessaire pour monter(avec fenêtre de changement de niveau)
1
| $game_party.members[n].change_exp($game_party.members[n].next_level_exp, true) |
Donner juste l'xp nescessaire pour monter(sans fenêtre de changement de niveau)
1
| $game_party.members[n].change_exp($game_party.members[n].next_level_exp, false) |
Remplace n par la position du personage dans l'éuipe - 1
|
Minimaliste, le "." comme signe de ralliement. |
RedOx -
posté le 03/02/2015 à 20:59:04 (17 messages postés)
| Anciennement jcpo23 | Y aurait t il un script pour animer des battler en gif ? Ou il y a une autre façon de les utiliser ?
Rpg Maker Vx Ace
|
Mac-AB -
posté le 04/02/2015 à 20:43:07 (82 messages postés)
| | Support : RMAce
Question : Salut, j'ai fait un écran titre perso en remplacant le fond d'écran par une image dans laquelle est incrusté "nouvelle partie", "charger" et "quitter", et j'ai donc enlevé les écritures du jeu (base de données puis lexique puis en bas à droite) qui apparaissent normalement, donc il n'y a rien d'écrit dans ces 3 cases.
Sauf que je me suis aperçu que lorsque je veux quitter le jeu par le menu, je clique donc sur "quitter" pour que ça m'ouvre la fenêtre où il y a normalement écrit "écran titre","quitter" et "annuler"sauf que du coup il n'y a plus de "quitter"^^
Donc ya pas moyen de modifier une chtite ligne de script pour que ça m'affiche le"quitter" à ce moment là mais pas à l'écran titre ?
Merci à celui qui me sauvera
|
Tout le monde souhaite être riche... Moi je souhaite que tout le monde soit pauvre... | Aller à la page 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 73Index du forum > Entraide > [Scripts] Petites questions connes sur les SCRIPTS!!
|