Bienvenue visiteur !
|
Désactiver la neige
Statistiques
Liste des membres
Contact
Mentions légales
310 connectés actuellement
30788068 visiteurs depuis l'ouverture
761 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
Messages postés par Nagato Yuki Nombre de messages référencés sur Oniromancie (non supprimés): 298 Aller à la page: 1 2 3 4 5 6 7 8
Posté dans Forum - Un petit script pour faire des barres facilement |
Nagato Yuki -
posté le 29/01/2012 à 12:37:33. (351 messages postés) |
| Bah si tu veux d'occuper des cercle je passe le script que j'ai fait alors :B avec les image selon ce que j'ai dit :
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| module Yuki
class Bar
def initialize(bmp,bh,uw,cx,cy,cw,viewport=nil)
raise("Erreur, le bitmap fourni n'est pas de la bonne classe.") if bmp.class != Bitmap
@sp_bar=Sprite.new(viewport) unless @sp_bar
@sp_bar.bitmap=bmp
@sp_cnt=Sprite.new(viewport) unless @sp_cnt
@sp_bar.src_rect.height=
@bh=bh.to_i #Bar Height
@uw=uw.to_i #Cnu Width
@cx=cx.to_i #Cnt x
@cy=cy.to_i #Cnt y
@cw=cw.to_i #Cnt Width
@av=0 #Avancement
@am=1 #Avancement Max
@sp_cnt.bitmap.dispose if @sp_cnt.bitmap
@sp_cnt.bitmap=Bitmap.new(@cw,@sp_bar.bitmap.height-@bh)
@src_rect ? @src_rect.set(0,@bh,1,@sp_cnt.bitmap.height) : @src_rect=Rect.new(0,@bh,1,@sp_cnt.bitmap.height)
@dest_rect ? @dest_rect.set(0,0,1,@sp_cnt.bitmap.height) : @dest_rect=Rect.new(0,0,1,@sp_cnt.bitmap.height)
self.x=x();self.y=y()
@disposed=false
refresh()
end
def refresh()
return if @disposed
av_prc=@av.to_f/@am
@src_rect.x=(av_prc*@uw).to_i
@src_rect.x=@uw-1 if @src_rect.x>=@uw
@dest_rect.width=(av_prc*@cw).to_i
@sp_cnt.bitmap.clear
@sp_cnt.bitmap.stretch_blt(@dest_rect,@sp_bar.bitmap,@src_rect)
end
def x()
return @sp_bar.x
end
def y()
return @sp_bar.y
end
def z()
return @sp_bar.z
end
def viewport()
return @sp_bar.viewport
end
def x=(v)
@sp_bar.x=v
@sp_cnt.x=v+@cx
end
def y=(v)
@sp_bar.y=v
@sp_cnt.y=v+@cy
end
def z=(v)
@sp_bar.z=v
@sp_cnt.z=v+1
end
def reinitialize(bmp,bh,uw,cx,cy,cw)
initialize(bmp,bh,uw,cx,cy,cw)
end
def set_avancement(v)
@av=v.abs.to_i
end
def set_avancement_max(v)
@am=v.abs.to_i if v!=0
end
def get_avancement()
return @av
end
def get_avancement_max()
return @am
end
def dispose()
@disposed=true
@sp_bar.dispose
@sp_bar=nil
@sp_cnt.bitmap.dispose
@sp_cnt.dispose
@sp_cnt=nil
end
end
end |
L'utilisation est simple, pour créer la barre il faut faire :
var=Yuki::Bar.new(Bitmap,Bar_height,Cnu_width,Cnt_x,Cnt_y,Cnt_width,viewport)
Avec les informations suivante :
Bitmap : Image de la barre
Bar_height : Hauteur de la barre
Cnu_width : Largeur du contenu si vous le faites avec trois pixel ça feras 33% pour chaque couleurs et le script adapteras en fonction de ça.
Cnt_x : Position x de collage du contenant dans la barre
Cnt_y : Position y de collage du contenant dans la barre
Cnt_width : Largeur du contant dans la barre
viewport : Viewport des sprites, optionnel
On peut réinitialiser la classe mais sans viewport.
Les méthodes sont :
x(),y(),z() pour obtenir les positions
x=(v),y=(v),z=(v) pour modifier les positions avec v étant un réel.
set_avancement(v) pour modifier l'avancement avec v étant un entier positif.
set_avancement_max(v) pour modifier le maximum de l'avancement avec v étant un entier positif non nul.
get_avancement() et get_avancement_max() sert à les obtenir.
dispose() même effet que Sprite ou presque
Je n'ai pas vraiment poussé dans les méthodes c'est juste un barre en image basique donc bon c'est pas aussi complet que Sprite ou autre.
Voici un exemple avec les images :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| $bar=Yuki::Bar.new(Bitmap.new("0.png"),6,12,12,1,39)
$bar.x=60
$bar.y=10
$bar.z=1024
$bar.set_avancement_max(100)
101.times do |i|
$bar.set_avancement(i)
$bar.refresh()
Graphics.update
end
$bar.reinitialize(Bitmap.new("1.png"),24,48,48,4,156)
$bar.set_avancement_max(100)
101.times do |i|
$bar.set_avancement(i)
$bar.refresh()
Graphics.update
end
$bar.set_avancement(0)
$bar.refresh
Graphics.wait(10)
$bar.dispose |
0.png :
1.png :
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Posté dans Forum - Un petit script pour faire des barres facilement |
Nagato Yuki -
posté le 29/01/2012 à 11:12:38. (351 messages postés) |
| Si les barres ne sont pas très belles, pourquoi ne pas utiliser un PNG pour la barre et les couleurs et créer un bitmap grâce à celui-ci selon les dimensions donnés et faire des stretch_blt pour le dessin de celle-ci ?
Ça ne fais pas 500 PNG pour une barre, si vous en avez 500 c'est que soit la barre est très complexe (elle change en fonction du contenu par exemple plus de HP elle deviens triangulaire fin je dis des conneries là :B), soit vous avez créé une barre pour chaque pourcentages de celle ci alors que c'est faisable avec une seule image. Sur l'image en haut on met la barre qui aura une forme spécifique avec un contenant rectangulaire (contenant : là où l'avancement sera collé). Sur la partie du bas on met le contenu qui prendra un certaine taille en largeur et la taille qu'il reste entre la fin de l'image en hauteur et la fin de l'espace pris par la barre en hauteur.
Au final, il restera plus qu'à initialiser Bar avec les paramètres suivant :
Bitmap : Image de la barre
Bar_height : Hauteur de la barre
Cnu_width : Largeur du contenu si vous le faites avec trois pixel ça feras 33% pour chaque couleurs et le script adapteras en fonction de ça.
Cnt_x : Position x de collage du contenant dans la barre
Cnt_y : Position y de collage du contenant dans la barre
Cnt_width : Largeur du contant dans la barre
Le reste sera calculé, et le script créera deux sprites : Barre et Contenant, la barre aura le droit à un src_rect pour éviter de voir la palette de couleurs et le contenant sera l'objet rafraichis en fonction de ce qu'on demande.
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Posté dans Forum - RM Vx ace |
Nagato Yuki -
posté le 29/12/2011 à 14:33:14. (351 messages postés) |
| Il y a trois couches sur une MAP d'RMVX (4 mais la 4ème c'est les zones).
Couche 1 : Autotiles
Couche 2 : Décors sur Autotiles / Barrières / Certains éléments du tileset A1
Couche 3 : Tiles B C D E.
On pourrait mapper sur trois couches, mais faut coder le programme qui fait ça, je pense que le TileMap se fiche complètement de l'id du tile sur la couche mais vaut mieux tester...
J'ai testé une Map de 28*40 avec des autotiles en couche une et deux et la couche trois remplis du second tile du tileset B, je tournais à 53 fps donc c'est pas vraiment dramatique mais bon j'avais pas d'évents sur la Map.
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Posté dans Forum - RM Vx ace |
Youri -
posté le 25/11/2011 à 16:45:15. (351 messages postés) |
| Le multitileset probablement... Et importer un projet RMVX fait que tu perds les nouveautés de VXace (scripts) et inversement si il dégomme le fichier script.rvdata tu perds tes scripts donc la compatibilité ne peut être directe.
C'est surtout un problème de structure parce que le RGSS 3 ça doit être des classes/methodes en plus et des fonctions recodées pour aller plus vite. (Et peut être qu'il tourne sur le Ruby 1.9 :B)
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
Youri -
posté le 04/11/2011 à 21:17:18. (351 messages postés) |
| Non. (pour Mack ^^', oniro ne préviens pas quand il y a des nouveaux messages.)
cmd if bool <=> if bool;cmd;end
Donc ça vaudrait :
1
2
3
4
5
6
7
8
9
|
begin
@@Map_Data=load_data(sprintf(S_Map_File,map_id))
rescue
if Warn
p $! #Affiche le message d'erreur
end
return #Sortie de la methode (renvois nil accessoirement) car pas de ma chargée.
end |
Et pour l'autre problème remplace plutôt par 0...a.size
Le code de Tasslehoff fonctionne bien mieux.
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
Youri -
posté le 04/11/2011 à 20:02:35. (351 messages postés) |
| Le premier code sert à charger une map si l'id est différent de l'id de la map précédente ou si la map vaut nil ou false, le @@ veut dire variable de classe, la variable de classe est enregistré dans la constante Interpreter et non les objets séparés générés par Interpreter.new et est accessible depuis tous les objets générés par la classe dans la quel elle a été définie. N'étant sur de rien je préfères utiliser un variable de classe plutôt qu'une variables d'instance.
"rescue" sert en cas d'erreur et les parenthèse elle servent à exécuter un sous programme, j'avais pas envie de mettre begin rescue end donc j'ai fait du code "bourrin" qui prends moins de place et moins de lignes, ";" sert à dire que la commande est terminées comme dans beaucoup de langages de programmation.
Après $game_map.events est un hash, c'est l'équivalent de deux tableaux qui contiennent séparément les clef et leurs valeurs. Donc, je récupère les clefs car j'ai besoins que des ids des évents arr=$game_map.events.keys, et je les tries (on sait jamais) en utilisant la methode sort de la classe Array.
oid=id c'est simplement l'id de l'évent à la base o pour old.
arr[-1] est la dernière case du tableau donc je capture la dernière case qui doit contenir l'id du dernier évent et j'y ajoute 1 pour créer un nouvel id propre à l'évent copié donc oui je fais en sorte à utiliser une valeur dont je suis sur qu'elle est vide.
Pour ton problème il n'y a pas d'erreur de syntaxe, mais en l'insérant dans appelle de script ça peut être gênant car RMXP peut coupé à partir de la huitième ligne ce qui fait que le code est interprété à moitié et ce qui donne l'erreur de syntaxe. Sinon, il y a une erreur de type car tu sort de l'array "a", for i in 0..a.size va aller de 0 à a.size or a[a.size]==nil et a[a.size+1] est aussi égale à nil donc ça va poser des problèmes.
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
Youri -
posté le 03/11/2011 à 19:09:41. (351 messages postés) |
| Tu peux faire move_event(1,$variable_x,$variable_y,map_id)
La variable $varable_x et $varaible_y devront être définies (ou pas) par toi quelque part, dans l'évent donc tu peux faire :
1
| move_event(1,$game_variables[500],$game_variables[501]) |
Et si tu veux copier celui de la map 53 avec les coordonnées que tu as enregistrer dans les variables 500 et 501 tu fais :
1
| move_event(1,$game_variables[500],$game_variables[501],53) |
Tu peux mettre des variables en argument mais fait gaffe au contenu de celle ci.
ID_MAP_DATA est la variable par défaut donc si tu ne met pas l'argument map_id elle est prise. (Tu peux changer la valeur si tu met tous les évents sur une seule map ou mettre la valeur dans l'argument prévu si t'as les évents sur plusieurs maps.)
@Mack : Explique où c'est galère. (Utilisation / contenu)
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
Youri -
posté le 03/11/2011 à 18:45:50. (351 messages postés) |
| J'avais pas regardé le lien ^^'
Mon script n'est pas vraiment complexe, il copie l'évent à la position voulue (ou position de base en mettant false ou nil aux coordonnées) depuis une autre map en lui laissant l'id sauf cas d'évent préexistant et ne recharge pas la map (sauf exception particulière) ce qui évite aussi la récréation d'objets inutiles.
Bon après, je fais de manière différente et je n'ai pas commenté (par habitude). (Bon, je dis que c'est pas complexe mais je sais comment ça fonctionne en même temps...)
Sinon, je pense que pour l'autre script si on fait un truc comme ça dans un appel :
Create_Event.new(2)
Create_Event.new(3)
Create_Event.new(4)
Create_Event.new(5)
Create_Event.new(6)
Create_Event.new(7)
La création ne fonctionnera pas correctement car lors de l'appel de script Scene_Map n'est pas mis à jour(à moins qu'il y ai un code comma ça : Thread.new{loop do;$scene.update;sleep(0.025);end} quelque part mais j'en doute un peu :B) et les évents pourraient ne pas être affichés. (J'ai pas vérifié.)
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Posté dans Forum - [Scripts] Petites questions connes sur les SCRIPTS!! |
Youri -
posté le 03/11/2011 à 18:00:09. (351 messages postés) |
| Tien :
[hide=Script]
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
| #===
#¤Class Interpreter
#---
#%Ajout de la methode permettant de charger une évent depuis une autre map
#%Sur la map en cours.
#---
#© 03/11/2011 - Nuri Yuri (塗 ゆり)
#===
class Interpreter
ID_MAP_DATA=2
S_Map_File="Data/Map%03d.rxdata"
Warn=true
@@old_Map_id=nil
@Map_Data=nil
def move_event(id,x,y,map_id=ID_MAP_DATA)
if @@old_Map_id != map_id or !@@Map_Data
@@old_Map_id=map_id
@@Map_Data=load_data(sprintf(S_Map_File,map_id)) rescue (p $! if Warn;return)
end
event=@@Map_Data.events[id]
if event
event.x=x.to_i if x
event.y=y.to_i if y
event=Game_Event.new($game_map.map_id, event)
if $game_map.events[id]
arr=$game_map.events.keys.sort
oid=id
id=arr[-1]+1
$game_map.events[id]=event
p "Attention, l'évent #{oid} existe déjà sur la Map #{$game_map.map_id}, l'évent à été placé avec l'id : #{id}" if Warn
else
$game_map.events[id]=event
end
$scene.spriteset.push_character_sprite(id) if $scene.class==Scene_Map
return true
else
p "Erreur : L'évent #{id} n'a pas été trouvé sur la Map #{map_id}" if Warn
return
end
end
end
#===
#¤Class Spriteset_Map
#---
#%Ajout de la methode d'ajout de sprite.
#---
#© 03/11/2011 - Nuri Yuri (塗 ゆり)
#===
class Spriteset_Map
def push_character_sprite(id)
sprite = Sprite_Character.new(@viewport1, $game_map.events[id])
@character_sprites.push(sprite)
end
end
#===
#¤Class Scene_Map
#---
#%Ajout de l'attribut spriteset
#===
class Scene_Map
attr_accessor :spriteset
end |
[/hide]
Tu met dans un évent move_event(id,x,y) et ça va déplacé l'event id à la position x,y sur la map en cours depuis la map ID_MAP_DATA ou valeur ajouté dans le paramètre optionnel.
Si un évent de l'id existe déjà l'évent déplacé aura un autre id et tu sera prévenu si Warn a pour valeur true (met donc false pour le désactiver.)
J'espère que c'est ce que tu veux, bonne continuation pour ton projet.
|
Pokémon Workshop, le site de Making Pokémon sur RPG Maker~ |
Aller à la page: 1 2 3 4 5 6 7 8
|
|
|