Connexion
Menu Principal
Recherche
Menu secondaire
Image Aléatoire
Publicité
|
|
Re: Mode achat dans game blender |
|
Fou Furieux du Clan 
Inscrit: 02/11/2008 19:26
Post(s): 238
|
Exacte, c'est de cette liste que je parlais : dans le second script, change la ligne qui fait défaut ('liste_objet = ', remplace les noms que j'ai écrit par les noms de tes properties qui correspondent). Change aussi la ligne du premier script 'self.prix = ', pour coordonner le tout. Reste plus qu'a tester 
Contribution le : 02/11/2010 21:04
|
_________________
Guillaume
|
|
Re: Mode achat dans game blender |
|
Fou Furieux du Clan 
Inscrit: 22/05/2010 11:23
Post(s): 176
|
J'ai toujours le même problême : En plus de la propriete "text" (qui permet de mettre du texte ou chiffre), j'ai ajouté une propriety coque1 comme nom ou avec OBcoque1. Dans les 2 cas, ça ne fonctionne pas. Je vais te donner le fichier blend. (il est évident que j'ai laissé les pièce dans le calque 3 pour que ça fonctionne, je n'ai pas encore terminé complètement la texture des pièces et de leurs formes, donc pas de panique). Remarque: j'ai oubliés d'ajouter ces fameuse propiety. c'est la petite fenêtre qui ressemble a un tableau. Tu le reconnaitra assez facilement. 
Contribution le : 03/11/2010 11:38
|
_________________
Tuer l'alien, écraser le mutant, bruler l'hérétique.
|
|
Re: Mode achat dans game blender |
|
Fou Furieux du Clan 
Inscrit: 02/11/2008 19:26
Post(s): 238
|
Blender plante quand je lance le GE  Un problème de fichiers qu'il ne trouve pas, apparemment... Mais, j'ai analysé ta scène et je peux te dire qu'il faut changer le 2nd script : cont = GameLogic.getCurrentControlleur()
own = cont.owner
achat = {}
somme_achat = 0
# l'etiquete est le nom du plan, la valeur le nom de l'objet
liste_objet = {"OBqte stock 1":"OBCoque", "OBqte stock 1.001":"OBCheminee1", "OBqte stock 1.002":None, "OBqte stock 1.003":None, "OBqte stock 1.004":None}
# on retient la liste des objets achetes et leur quantitee
for objet in liste_objet:
OB = GameLogic.getCurrentScene().getObjectList()[objet]
if int(OB["Text"]) == 0 or liste_objet[objet] == None:
pass
else:
achat[liste_objet[objet]] = int(OB["Text"])
for objet in achat:
somme_achat += achat[objet]*GameLogic.inventaire.prix[objet]
GameLogic.inventaire.acheter(achat)
GameLogic.inventaire.argent += -somme_achat
Bon je n'ai pas pu le tester, ça plante à chaque coup. Pour explication, on récupère directement la quantité acheté des propriétés Text des plans qui l'affichent. J'ai ajouté un dictionnaire pour faire le lien entre les plans et les objets : le 1er plan correspond à OBCoque1... etc. Si tu désires changer les pièces à acheter, tu change uniquement liste_objet : ne touche pas aux étiquètes, seules les valeurs sont à changer. 'None' signifie qu'il n'y a rien, donc si tu ne veux pas qu'un bouton serve tu mets None. None n'a pas besoin de guillemets, alors que les noms des objets en ont besoin. Si tu veux que, dans un moment du jeu, tu veux changer les objets que tu peux acheter tu peux utiliser une variable global, et la changer ensuite. Tu peux même la sauvegarder dans ton fichier de sauvegarde. Si tu veux plus d'indication, fait moi signe  Bon blend 
Contribution le : 03/11/2010 19:33
|
_________________
Guillaume
|
|
Re: Mode achat dans game blender |
|
Fou Furieux du Clan 
Inscrit: 22/05/2010 11:23
Post(s): 176
|
Bonsoir J'ai testé cela et voici ce qu'il me dit (en ligne de commande) OB = GameLogic.getCurrentScene().getObjectList()[objet]
^
IndentationError : expected an indented block Je suis quand même consterné de ne pas pouvoir résoudre une partie du problème  . Je supposes que ça viendra avec le temps... mais je pourrai déja lire le document "apprendre python 3". 
Contribution le : 03/11/2010 20:38
|
|
|
Re: Mode achat dans game blender |
|
Fou Furieux du Clan 
Inscrit: 02/11/2008 19:26
Post(s): 238
|
Ah, je m'attendais à tous sauf à ça... Je ne suis pas sûr, mais je croix qu'il manque le "décalage" : cette ligne ne doit pas être aligné sur la gauche. Respecte bien les marges que j'ai faites, et réessaye. 
Contribution le : 03/11/2010 23:01
|
_________________
Guillaume
|
|
Re: Mode achat dans game blender |
|
Fou Furieux du Clan 
Inscrit: 22/05/2010 11:23
Post(s): 176
|
Je confirmes, c'était bien un problème de ligne. Traduis, on me dit que Method GameObjectList<> est obsolète, veuillez utiliser la/les propriété(s) de(s) l'/objet(s) au lieu de ça. confirm achat:13 C'est peut-être ce que tu attendais... Cela veux-t-il dire qu'il faut mettre des propiétés sur les pièces ? Pour info, je le répète peut-être mais j'ai lié le script 1 "gest pce" au plan "marché" et le 2e "confirm achat" sur le plan "argent achat". il faut peut-être mettre le 2e script sur un bouton qui "confirmera" l'achat et pas sur un "texture text". 
Contribution le : 04/11/2010 11:13
|
_________________
Tuer l'alien, écraser le mutant, bruler l'hérétique.
|
|
Re: Mode achat dans game blender |
|
Fou Furieux du Clan 
Inscrit: 02/11/2008 19:26
Post(s): 238
|
Si c'est la seule chose qu'il te dit, alors ç'est que ça marche !!! (ou pas...)Pour éviter qu'il affiche ce message à chaque fois, remplace OB = GameLogic.getCurrentScene().getObjectList()[objet]
par OB = GameLogic.getCurrentScene().objects[objet]
Ce n'est pas vraiment une erreur, mais c'est juste une fonction qui est peu à peu abandonnée, donc il indique qu'il ne faut plus l'utiliser (deprecated = déprécié = contraire de appréciée). Et oui il faut lancer le script uniquement que l'achat est fait, donc sur le bouton de confirmation. Mais par contre je pense que tu devrais remplacer le 2nd script par celui-ci : achat = {}
somme_achat = 0
# l'etiquete est le nom du plan, la valeur le nom de l'objet
liste_objet = {"OBqte stock 1":"OBCoque", "OBqte stock 1.001":"OBCheminee1", "OBqte stock 1.002":None, "OBqte stock 1.003":None, "OBqte stock 1.004":None}
# on retient la liste des objets achetes et leur quantitee
# 'for' permet de parcourir tous les elements de la liste liste_objet
for objet in liste_objet:
# OB est l'un des compteurs
OB = GameLogic.getCurrentScene().objects[objet]
if int(OB["Text"]) == 0 or liste_objet[objet] == None:
# Si le compteur ne sert pas ou s'il vaut zero, on ne fait rien
pass
else:
# on entre la valeur du compteur dans le dictionnaire achat
achat[liste_objet[objet]] = OB["Text"]
# remise a zero du compteur
OB["Text"] = 0
# on parcourt la liste d'achat et on calcul le montant, en faisant quantite x prix
for objet in achat:
somme_achat += achat[objet]*GameLogic.inventaire.prix[objet]
# on ajoute au stock les objets achetes
GameLogic.inventaire.acheter(achat)
# on depense l'argent...
GameLogic.inventaire.argent += -somme_achat
Il y a peu de changements, mise à part la suppression des 2 premières lignes qui ne servaient à rien, la remise à zéro des compteur après l'achat, et tout plein de commentaires que j'ai rajouté pour te faciliter la compréhension du script 
Contribution le : 04/11/2010 18:28
|
_________________
Guillaume
|
|
Re: Mode achat dans game blender |
|
Fou Furieux du Clan 
Inscrit: 22/05/2010 11:23
Post(s): 176
|
En effet, c'est plus simple (pour le commantaires).
On ne me signale aucune erreur à présent. On est bientôt à la fin du tunnel :
- J'ai donc lié le 2e script au bouton confirmer de la case inventaire (comme condition, il faut placer le pointeur dessus et cliquer sur ce bouton) et quand je testes, j'achetes une coque et le compteur met bien 1 mais revient tout de suite à 0.
Serait-ce le fait que la fenêtre inventaire ne soit pas visible de la camera au début du jeu ?
Donc, résumons-nous : quand on achete une pièce, le nombre de sa catégories augmente. Une fois tout ces achat ont été fait, on dois avoir le total du prix et le total de pièce.
En confirment l'achat, il doit y avoir une remise à zéro du/des compteur(s) inventaire, du total à dépenser et enfin afficher l'argent qui reste.
au sujet de la soustraction, tu la fait en script je crois. Dois-je lier le 2e script au(x) "texture text" "fonds disponible" et "achat" ? ou alors, je dois faire un "actuator" qui soustrait cela ?
Contribution le : 05/11/2010 10:50
|
_________________
Tuer l'alien, écraser le mutant, bruler l'hérétique.
|
|
Re: Mode achat dans game blender |
|
Fou Furieux du Clan 
Inscrit: 02/11/2008 19:26
Post(s): 238
|
Non, pas besoin, tu peux laisser le script là où il est sans rajouter des actuators. Si tu veux faire une mise à zéro et la soustraction, tu rajoute ces lignes à la fin du 2nd script : # Remise a zero du compteur achat
GameLogic.getCurrentScene().objects["OBArgent achat"]["Text"] = 0
# Rafraichissement du compteur argent
GameLogic.getCurrentScene().objects["OBArgent"]["Text"] = GameLogic.inventaire.argent
Le fait d'utiliser GameLogic.getCurrentScene().objects permet de récupérer n'importe quel objet dans la scène, et objet["Propriété"] permet d'accéder à ses propriétés. Tout ce qui est nécessaire, ce sont les briques logiques pour lancer le script. Pas besoin d'en rajouter pour modifier la scène. -> Je n'y ai pas pensé, mais veux tu bloquer l'achat si son montant est supérieur à l'argent disponible ?
Contribution le : 05/11/2010 19:16
|
_________________
Guillaume
|
|
Re: Mode achat dans game blender |
|
Fou Furieux du Clan 
Inscrit: 22/05/2010 11:23
Post(s): 176
|
Citation : Je n'y ai pas pensé, mais veux tu bloquer l'achat si son montant est supérieur à l'argent disponible ? Tu anticipes mes pensées. Oui, se serai parfait. Si je ne me trompe pas, ça dois être avec la condition : if prix achat >= prix de départ :
(je ne sais pas aller plus loin)
j'ai un souci a signaler (bug) : - Quand je commances le jeu, le compteur de départ, mis à 10000, est a 0. - Quand je cliques sur le bouton acheter une coque, par exemple, le compteur de coque passe de 1 puis revient directement a 0. - Quand je ferme la catégorie coque ou que j'ouvre une autre, le compteur "argent disponible" et "achat" sont mis à 0.
Contribution le : 06/11/2010 10:35
|
|
|
Sujets récemment répondus |
|
|
|
Qui est en ligne
226 utilisateur(s) en ligne (dont 167 sur Forums) Membre(s): 0 Invité(s): 226 plus... Nouveaux membres
Dernier Ajout
Evènements à venir
|