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:
zou -
posté le 28/12/2010 à 21:41:33 (2197 messages postés)
| | Bonsoir, ceci, n'est pas un problème mais plutôt une question :
dans ce script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
self.x = @picture.x
self.y = @picture.y
self.z = @picture.number
# Set zoom rate, opacity level, and blend method
self.zoom_x = @picture.zoom_x / 100.0
self.zoom_y = @picture.zoom_y / 100.0
self.opacity = @picture.opacity
self.blend_type = @picture.blend_type
# Set rotation angle and color tone
self.angle = @picture.angle
self.tone = @picture.tone
|
A quoi sert le "self", pourquoi ne pas mettre @ ?
| Suite du sujet:
Kaila -
posté le 29/12/2010 à 00:04:59 (3617 messages postés)
| Hmmm ? | Là ? À rien: self = @.
|
Everything is better with zombies. |
Autres -
posté le 29/12/2010 à 09:07:16 (470 messages postés)
| | @ Patton : merci pour ton aide, mais ça ne marche pas. Quand j'appelle le script $game_variables[200] = $game_party.weapon_number(1), il me dit : "NoMethodError occured while running script.
undefined method "weapon_number" for #<Game_Party:0x3f5fd50>"
|
On se couche moins con chaque soir... enfin, en principe. Le Pac-Nor ! |
zou -
posté le 29/12/2010 à 10:56:21 (2197 messages postés)
| | Citation:
A quoi sert self alors dans le cas général ?
|
Kaila -
posté le 29/12/2010 à 12:10:03 (3617 messages postés)
| Hmmm ? | En fait, on se sert de self pour appeler des fonctions, pas des attributs.
Dans le cas des accesseurs Ruby, étant donné qu'ils sont équivalents à ces deux fonctions
1
2
3
4
5
6
| def val=(x)
@val=x
end
def val
return @val
end |
on ne voit pas de différence entre @val et self.val, mais il y en a une: on passe bien par une fonction, et pas directement par l'attribut. C'est utile quand on fait des accesseurs qui font un traitement particulier.
Testes ce bout de code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| class Test
def initialize
@val = 0
end
def val=(x)
@val = x*2
end
def afficher
@val = 3
print @val
end
def afficherSelf
self.val = 3
print @val
end
end |
Tu verras que 'afficher' affiche 3 (l'attribut brut), mais 'afficherSelf' affiche 6 (car l'accesseur multiplie la valeur par 2).
Donc dans l'exemple que tu as donné, il y a sûrement des accesseurs (soit implicites (attr_writer, attr_reader, attr_accessor) soit explicites (comme dans ma classe Test)), sinon le self.angle, par exemple, renverrait une belle erreur "NoMethodError: undefined method 'angle' for #<....>".
Self sert aussi à faire des méthodes statiques (des méthodes qu'on appelle directement, sans passer par un objet). Par exemple, avec cette classe:
1
2
3
4
5
6
7
8
9
10
11
| class Test2
@@nb_objets = 0
def initialize
@@nb_objets += 1
end
def self.nombre_objets
return @@nb_objets
end
end |
Si exécute ce code:
1
2
3
4
5
6
| test1 = Test2.new
test2 = Test2.new
test3 = Test2.new
test4 = Test2.new
test5 = Test2.new
print Test2.nombre_objets |
ça m'affiche 5.
Par contre, qui dit "méthode statique" dit aussi "traitement statique", donc impossible d'utiliser des attributs dépendant du contexte d'un objet (pas de @val là dedans, donc).
C'est très utilisé dans les modules parce que, justement, on ne peut pas les instancier.
Hmmm... voilà.
|
Everything is better with zombies. |
zou -
posté le 29/12/2010 à 12:31:03 (2197 messages postés)
| | Merci beaucoup Kaila
Pour faire simple @ renvoie la variable et self la méthode
|
Kaila -
posté le 29/12/2010 à 13:08:50 (3617 messages postés)
| Hmmm ? | Exactement ^^
|
Everything is better with zombies. |
patton -
posté le 29/12/2010 à 22:05:04 (35 messages postés)
| | Autres a dit:
Bien je ne sais pas quoi te dire... chez moi ca marche plutôt bien. A savoir que j'ai testé avec la commande d'event "inserer script"...
Zeus81 a dit:
$game_party.actors[0].hit
Tu sais ce genre de chose ça se devine pas, suffit d'aller voir les fonctions de Game_Actor / Game_Battller pour trouver ce qu'on cherche.
|
En faite je pensais..a tord effectivement que le $game_party.actors[0].hit ne variait pas qu'il etait toujours a 100. Je me demande si j'ai pas tendance a chercher midi a 14 heure
Bref merci beaucoup.
Support : RMXP
Attention...Question :
Peut on modifier les caractéristiques d'un hero qui ne serrais pas dans la party(equipe). Genre les hpmax, agi ...ect. Je ne sais pas comment faire comme c'est dans la base de donnée.
merci d'avance.
|
Zeus81 -
posté le 30/12/2010 à 17:50:34 (11071 messages postés)
| | $game_actors[id du héros dans la bdd]
|
patton -
posté le 30/12/2010 à 18:15:19 (35 messages postés)
| | Merci.
Je sais pas pourquoi j'en voulais t'en a $data_actors[id].agi ...
Celui la sert a quoi alors?
|
Zeus81 -
posté le 30/12/2010 à 18:34:26 (11071 messages postés)
| | $data_actors contient les données des héros de la bdd au format RPG::Actor et c'est utilisé pour initialiser les Game_Actor, le modifier ne sert à rien vu que c'est pas sauvegardé.
$game_actors contient les Game_Actor.
|
patton -
posté le 30/12/2010 à 18:44:51 (35 messages postés)
| | Merci de ton éclairage et de tes réponses.
|
Autres -
posté le 31/12/2010 à 09:02:41 (470 messages postés)
| | Support : RMVX
Question 1 : RESOLUE
Est-il possible d'obtenir le numéro d'un perso dans l'équipe en sachant son ID (par exemple, j'ai les persos d'ID 1, 3 et 6 dans mon équipe, comment faire pour connaître la position du perso 3 dans l'équipe (0,1 ou 2) ?) ?
REPONSE :
1
| position = $game_party.members.index($game_actors[3]) |
Merci d'avance !
P.S. : ma première question n'est toujours pas résolue (maintenant, si).
|
On se couche moins con chaque soir... enfin, en principe. Le Pac-Nor ! |
Kaila -
posté le 31/12/2010 à 11:09:11 (3617 messages postés)
| Hmmm ? | *remonte le topic*
Citation: Comment mémoriser dans une variable (de script) le nombre d'armes/armures/casques... équipées possédées par le héros (en clair : si le héros est équipé avec une épée et qu'il en a une autre dans son sac comment mémoriser cette valeur (2) dans une variable) ? |
Pour l'arme:
1
2
3
4
5
| id = 2 # id de l'arme dans la BDD
nombre = $game_party.item_number($data_weapons[id])
for actor in $game_party.members
nombre += 1 if actor.weapon_id == id
end |
Pour les armures, c'est pareil, sauf que tu vas chercher dans $data_armors à la place de $data_weapons et tu devras remplacer actor.weapon_id par actor.armor1_id, actor.armor2_id, actor.armor3_id ou actor.armor4_id respectivement pour le bouclier, le casque, l'armure ou l'accessoire.
Citation: Est-il possible d'obtenir le numéro d'un perso dans l'équipe en sachant son ID (par exemple, j'ai les persos d'ID 1, 3 et 6 dans mon équipe, comment faire pour connaître la position du perso 3 dans l'équipe (0,1 ou 2) ?) ? |
1
| position = $game_party.members.index($game_actors[3]) |
|
Everything is better with zombies. |
Autres -
posté le 31/12/2010 à 15:31:55 (470 messages postés)
| | Merci beaucoup Kaila ! Je teste et je te dit si ça marche ^^'.
EDIT : ça marche parfaitement bien ! Merci beaucoup !
Par contre j'ai une nouvelle question maintenant :
Support : RMVX
Question :
Comment modifier la quantité d'objet/arme/armure... possédé via un script (exemple : j'ai 6 épées et je veux en avoir 7 via un script.) ? Je suppose qu'il faut utiliser
1
| $game_party.gain_item(item, n, include_equip = false) |
mais je n'arrive pas à comprendre ce qu'il faut mettre à la place de "item". Encore merci à celui/celle/ceux qui me répondra/répondront !
EDIT : Résolu : il faut remplacer item par
et "weapons" par "armors" ou "items".
|
On se couche moins con chaque soir... enfin, en principe. Le Pac-Nor ! |
Mack -
posté le 01/01/2011 à 00:49:04 (2310 messages postés)
- - | | Support : RMXP
Question 1 :
Savoir quelle définition se joue.
Voila, je cherche à savoir comment faire pour savoir quelle définition est en train de se jouer dans une scene ou dans une autre classe.
En faite, je voudrait savoir si, dans la classe Game_Character, les définitions move_up, move_down, move_right, move_left, sont en train de se passer.
J'ai pas l'impression que cela soit très clair, m'enfin bon ^^".
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
zou -
posté le 01/01/2011 à 00:50:30 (2197 messages postés)
| | moving?
|
Mack -
posté le 01/01/2011 à 00:53:51 (2310 messages postés)
- - | | Déjà essayer, et c'est pas ce qu'il me faut.
La méthode moving? renvoie true seulement si les coordonnées X ou Y change.
Hors, moi elle ne change pas, c'est seulement quand j'essaie de faire un déplacement.
Et puis, des fois j'en aurais besoin pour d'autre scripts.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
Mack -
posté le 01/01/2011 à 00:59:09 (2310 messages postés)
- - | | Sauf qu'il faudrait que ça le fasse aussi pour les évents =').
Sinon, je le ferais comme ça ... M'enfin, ça me parait pas être une très bonne solution.
|
( Je prend note de tout les commentaires, même si je n'y répond pas ) |
zou -
posté le 01/01/2011 à 01:04:59 (2197 messages postés)
| | Tu creer une variable @move dans game_characters et tu la rends = à true dans move_up left right down
tu mes un attr_reader :move
|
Tasslehoff -
posté le 01/01/2011 à 01:07:50 (5274 messages postés)
| Disciple de Pythagolf | Sinon dans chaque def tu change la valeur d'une variable quelconque puis tu test la valeur de cette variable.
Edit: Grilled
|
~~ |
Timo -
posté le 05/01/2011 à 13:55:20 (822 messages postés)
| | Je me permet un up.
Support : RMXP
Question 1 :
Dans quel script (et à quel ligne si possible) je peux retirer l'option "attaquer" pour les combat par défaut ???
|
zou -
posté le 10/01/2011 à 18:39:51 (2197 messages postés)
| | Salut tout le monde.
dans Game_Map il y a ça
Citation: bit = (1 << (d / 2 - 1)) & 0x0f |
A quoi ça sert svp ? (ligne 212)
|
Kaila -
posté le 10/01/2011 à 19:19:27 (3617 messages postés)
| Hmmm ? | d peut valoir 0, 2, 4, 6, 8 ou 10.
- (d/2-1), je pense que tu sais.
- 1 << x, c'est un décalage de x bit vers la gauche.*
- x & y, c'est un ET binaire entre x et y.**
* Le décalage de bit (il faut déjà connaître la représentation binaire d'un entier):
Si ton entier vaut, par exemple, 5. En binaire, ça fait 00000101 (sur 1 octet).
Si tu décales de 2 bits vers la gauche, t'obtiens 00010100. Donc ton entier vaut maintenant 20.
** Le ET binaire avec 0x0f:
0x0f, c'est de l'hexadécimal et ça vaut 00001111 en binaire (sur 1 octet).
Un ET binaire avec 0x0f permet de mettre la partie haute de l'octet (les 4 premiers bits) à 0:
00010100 & 00001111 = 00000100. Ton entier vaut maintenant 4.
Si tu ne sais pas faire d'opérations binaires ni de conversion entier <=> binaire <=> hexadécimal, tu peux te renseigner sur Google, les cours y foisonnent.
Après, pour savoir exactement à quoi ça sert dans le code de Game_Map, faudra que tu fasses des tests à la sortie de la fonction (j'ai jeté un rapide coup d'œil, ça doit certainement définir les passabilités en fonction de la direction...).
|
Everything is better with zombies. |
berka -
posté le 10/01/2011 à 19:30:07 (493 messages postés)
| planchant sur un script | L'opérateur << de Fixnum déplace l'objet d'un rang vers la gauche.
Il faut raisonner en binaire (noté 0bxxx en ruby)
1 = 0b1 = 1 << 0
2 = 0b10 = 1 << 1
4 = 0b100 = 1 << 2
8 = 0b1000 = 1 << 3
...
512 = 0b1000000000 = 1 << 9
et inversement avec l'opérateur >> (décale vers la droite)
& est un opérateur "bitwise" AND (et).
Si on prend 6 & 3
6 & 3 = 0b110 & 0b011 (équiv. 0b11, car les 0 à gauche s'annulent) = 2
Le fonctionnement: on énumère chaque bit de gauche à droite:
1 & 0; 1 & 1; 0 & 1
Dès que les deux bits sont égaux à 1 on marque 1, si un des bits est 0 on marque 0:
donc :
1 & 0 = 0;
1 & 1 = 1;
0 & 1 = 0;
ce qui fait:
6 & 3 = 0b110 & 0b011 = 0b010 = 2
Avec sa réciproque | (OR)
Dans Game_Map, ca sert à savoir la praticabilité en fonction de la direction (cf. les fleches de passabilité sur RMXP)
EDIT: doublé
|
Twitter: Pensées politiques et juridiques. Réflexions informatiques | 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!!
|