Programmation python dans le BGE
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1615
Bonjour,

Petite question: Dans mon jeu, chaque maps contiennent différentes scènes: le HUD, les mini-jeux, etc.

Si je sépares tout ça en blend séparés et que je les lies avec mes maps, ça fonctionnera ? L'idée, c'est d'optimiser le poids des map puisque le HUD, par exemple, est universel.

En supposant que les variables soient trouvables par le blend lié, ou "enfant", bien sûr.

Contribution le : 12/12/2017 16:56
Créer un fichier PDF de la contribution Imprimer


Re: Programmation et liens entre blend
Touriste
Inscrit:
15/11/2017 13:23
Post(s): 7
A mon avis c'est une mauvaise idée. Car tu vas perdre pas mal de ressource et le chargement sera plus long. Il faudrait plutôt que tu regroupe chaque scene dans un seul fichier .blend

Contribution le : 29/01/2018 09:25
Créer un fichier PDF de la contribution Imprimer


Re: Programmation et liens entre blend
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1615
Dans le projet "Yo Frankie", ils ont procédés comme ça. Certes, c'est avec une version beaucoup plus antérieure mais c'est fluide.

Je ne pense pas que les ressources seront impactés ou que le chargement soit plus long... je pense, ça reste à prouver...

Regrouper tout en un seul blend est impossible: pour faire simple, vu que ce n'est pas un "open world", je suis obligé de recharger la base de donnée, qui contient mes pnj, le joueur, les items...

Et faire un open world est impossible au point de vue technique (pour le BGE tout comme humainement).

J'ai une question plus côté python:

Certaines lignes produisent des effets précis mais, ils ne sont pas constamment sollicités. Par exemple, quand mon personnage va dans l'eau, un plan bleu apparaît ou disparaît si il en sort.

Quand mon personnage croise un personnage-non-joueur, une icône apparaît et disparaît s'il n'est pas assez proche de celui-ci.

Donc si on rajoute ce genre de lignes 4-5 fois, vous comprenez bien que c'est un gâchis de calcul.

Donc, ma question, c'est: Comment puis-je faire pour solliciter ces lignes uniquement au moment ou c'est nécessaire ?

Un petit schéma:
If planbleu ==  true:
   planbleu s'affiche à l'écran
else:
   planbleu ne s'affiche pas à l'écran

if pnj proche:
   afficher logo
elif objet proche:
   afficher un autre logo
else:
   ne rien afficher comme logo

Contribution le : 29/01/2018 10:21
Créer un fichier PDF de la contribution Imprimer


Re: Programmation et liens entre blend
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1615
Bonjour,

if dico['heure'] >= 5 and dico['heure'] < 8: # matin
   soleil.color = [1, 0.2, 0, 1]


Question: Si la couleur du soleil à déjà les configs suivantes, le BGE appliquera-t-il quand même la configuration ?

Question plus général en python: Ok, on dit qu'il faut faire le moins de lignes possibles mais ce que l'on en dit pas (du moins, j'ai pas trouvé), c'est que si la condition est vraie, python va-t-il appliquer ce qui suit si les valeurs sont déjà les même ?

Autrement dit, ne serait-ce pas plus intéressant de le faire passer cette étape ?

Enfin, besoin d'un petit rappel en rapport à mes questions: Qu'est-ce qui défini la vitesse d’exécution d'un script python ?

Contribution le : 05/02/2018 16:01
Créer un fichier PDF de la contribution Imprimer


Re: Programmation python dans le BGE
OverdOzed
Inscrit:
29/04/2007 19:11
De Nîmes...300 jours de soleil par an, inondations le reste du temps
Post(s): 3774
Il ne faut pas faire le moins de lignes possibles. Il faut écrire le code le plus clair et lisible possible. Ça passe, effectivement, par un code concis, mais typiquement quand tu es face à une méthode qui fait vingt lignes, la solution n'est pas d'enlever du code, c'est de le redécouper. La concision est un moyen d'atteindre la lisibilité, pas une fin en soi.

Quant à l'assignation, elle se fait même si la valeur est déjà la même. Le processeur est peut-être plus intelligent que ça, mais ça dépend du matériel, pas de Python, ne te pose donc pas la question.

Pour savoir si il peut intéressant de passer cette étape : non. Dans le cas actuel, tu fais parfois une assignation pour rien. En ajoutant un test pour vérifier si la valeur est la même ou pas, tu feras systématiquement un test, et parfois une assignation. L'assignation étant une opération élémentaire, ça ne vaut pas le coup.

Par contre, c'est de l'optimisation prématurée : première étape, un code qui marche ; deuxième étape, un code propre ; troisième étape, un code performant. Tant que tu n'as pas fini le module, tu n'en es pas à te demander si tu ne vas pas gagner une nanoseconde ici ou là.

Ensuite, on optimise d'abord les goulots d'étranglement, les points qui posent de réels problèmes de performance. Cf la loi de Pareto : 80% du temps de calcul se fait sur 20% du code, autant se concentrer sur ça, pas sur une assignation une fois par frame. Ce qui ne dispense pas de coder intelligemment, de bien structurer le code ou d'utiliser des algorithmes performants.

Pour aller plus loin... Ici, tu te poses la mauvaise question : ce n'est pas l'assignation qui pose problème, c'est l'initialisation de l'array [1, 0.2, 0, 1], c'est-à-dire une allocation et quatre assignations. Niveau performances, l'impact est toujours négligeable, mais considérablement plus élevé que l'assignation à la couleur. Et surtout, ce n'est pas propre, et ce pour deux raisons :
- On initialise le même tableau en boucle, ce n'est pas logique, la façon dont le code est écrit ne correspond pas à la façon dont il est pensé : tu veux "la couleur du soleil", pas "une nouvelle couleur du soleil".
- C'est un nombre magique. Cette valeur [1, 0.2, 0, 1] sort de nulle part, sans explication, et est codée en dur.

Bref, la couleur devrait être lue dans une propriété de l'objet, ou dans un fichier de configuration voire dans une constante globale quelque part, mais certainement pas initialisée à la volée et codée en dur.

Contribution le : 06/02/2018 02:02
_________________
|C'est en forgeant qu'on devient forgeron, c'est en mouchant qu'on devient moucheron et c'est en sciant que Léonard devint scie.
Créer un fichier PDF de la contribution Imprimer


Re: Programmation python dans le BGE
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1615
J'ai un peu du mal à comprendre:

Dans le petit code que j'ai écris, on à le canal RVB et Alpha

Quelle différence entre le mettre en dur et le mettre dans un dictionnaire ? De toute manière, la valeurs va être pompée dans celui-ci, non ?

Comment se fait-il qu'en utilisant une propriété + une action serait moins gourmande qu'en dur ?

Mon code, en général, fonctionne. Mais dire s'il est performant, je ne saurai le dire...

Voici mon code pour l’environnement d'un terrain de mon projet.

Il gère l'apparition des personnages, le système (chargement ,sauvegarde, etc), le climat, le HUD et les mini-jeux.

Ce n'est pas nécessaire de tout analyser (choisis une classe, simplement) mais au moins me donner des exemples de ce que tu viens de m'expliquer et me dire là ou je peux faire mieux, éventuellement.

Actuellement, le process logic de mon projet est à 60 fps mais diminue légèrement en présence de pnj. Au premier abord, et j'en suis certains, la gestion des armatures dans Blender n'est pas au point. Trop d'os par personnage fais grimper le process animation, ce qui impacte les fps.

Je récupères mes 60 fps en pleine nature, même avec quelques animaux.

Mon process logic, lui, est à 30 % (si je désactive le code de la minimap, j'en suis environs à 25 %) et ne semble pas trop s'emballer. C'est difficile à déterminer, car c'est un tout, mais impossible de savoir si je peux gratter encore plus de process logic ou pas.

J'ai déjà réussi à faire un script qui permet de contrôler tout les personnages de façon indirecte, ce qui n'est pas négligeable pour les performances.

Contribution le : 06/02/2018 12:11
Créer un fichier PDF de la contribution Imprimer


Re: Programmation python dans le BGE
OverdOzed
Inscrit:
29/04/2007 19:11
De Nîmes...300 jours de soleil par an, inondations le reste du temps
Post(s): 3774
La différence, c'est que tel que tu l'as écrit, ton code crée un nouveau tableau et le remplit avec [1, 0.2, 0, 1] à chaque fois que tu mets à jour la couleur du soleil.
C'est un problème pour trois raisons.
Premièrement, initialiser un tableau, ça coûte beaucoup plus cher que lire une variable.
Deuxièmement, le code ne fait pas ce qu'il est censé faire : dans ta tête, ce code dit "le soleil prend la couleur qu'il a le matin", mais dans les faits il dit "le soleil prend une couleur matinale".
Troisièmement, c'est incompréhensible. C'est quoi, ce [1, 0.2, 0, 1] ? Pourquoi ces valeurs ? D'où ça sort ? Alors oui, pour quelque chose d'aussi simple, n'étant pas idiot, je peux deviner les réponses à ces questions... Mais pourquoi devrais-je faire l'effort ? Ne vaudrait-il pas mieux que la réponse soit évidente ?

La solution optimale, c'est de définir la variable dans un fichier de configuration : l'artiste qui règle l'éclairage ne devrait pas avoir besoin de trifouiller dans du code. Puis, à l'initialisation, là où dans mon script je définis couleur_matin, de récupérer cette configuration pour en faire une variable globale.

Par exemple :
# Au lancement du jeu
couleur_soleil_matin = lire_propriete("couleur_soleil_matin") # Je ne sais pas comment on fait ça en python ^^
#
# Ailleurs dans le code
#
if dico['heure'] >= 5 and dico['heure'] < 8: # matin
   soleil.color = couleur_soleil_matin


PS : il y aurait beaucoup de choses à dire sur le code que tu as posté, je commenterai plus tard.

Contribution le : 06/02/2018 14:06
_________________
|C'est en forgeant qu'on devient forgeron, c'est en mouchant qu'on devient moucheron et c'est en sciant que Léonard devint scie.
Créer un fichier PDF de la contribution Imprimer


Re: Programmation python dans le BGE
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1615
Ok, donc tout ce qui est liste qui ne change pas (ou tuples ?), ça va dans mon dictionnaire qui sert de variable globale (ou peut-être dans ma classe mère ? Je vais voir).

Contribution le : 07/02/2018 11:02
Créer un fichier PDF de la contribution Imprimer


Re: Programmation python dans le BGE
OverdOzed
Inscrit:
19/03/2016 15:30
De Belgique
Post(s): 1615
Bonjour tout le monde,

Question python au sujet du module aud: si l'on doit appeler un fichier son plusieurs fois, on préconise de créer un buffer.

Mais, étant donné que le script doit être lancé une seule fois et qu'il est donc lu de A à Z à chaque fois, à quoi ça sert de respecter ce que j'ai écris plus haut ?

Contribution le : 18/07/2019 12:12
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
Compte*
Nom   Mot de passe   Authentification
Message:*



[Recherche avancée]



Sujets récemment répondus
Forums Sujets Réponses Lus Dernières contributions
Questions & Réponses switch entre IK/FK 4 33 Hier 18:54:05
prometheusx 
Questions & Réponses Je bloque sur la modélisation de ce verre! Avez-vous une solution? 8 223 Hier 13:23:47
debutant 
[WIP] et travaux terminés [WIP] Tutoriel vidéo et création de mon prochain court métrage 3 205 Hier 02:29:55
Meltingman2 
Questions & Réponses [non résolu] cloth: déformation bizzarre au rendu 3 67 07/08 09:21:18
Arielboid 
Questions & Réponses les cheveux longueur 1 51 06/08 19:53:18
Rimpotche 
Questions & Réponses ADDON MB - Lab 0 56 06/08 15:29:23
GI-jo13 
Questions & Réponses [résolu] en sculpt mode 5 173 04/08 18:21:10
prometheusx 
Questions & Réponses [résolu] Array circulaire 2 144 04/08 15:22:46
Redstar 
[WIP] et travaux terminés [WIP] Teeny Tiny - Story    [1][2][3]...[5] 40 3956 04/08 07:18:00
Bibi09 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS horreur - Première version disponible !    [1][2][3]...[58] 576 98174 03/08 11:11:32
Hook 
Questions & Réponses Addon pour textures procedurales 2 143 02/08 20:11:35
Crocodile_13 
Questions & Réponses avis animation marche :)    [1][2][3][4] 34 712 02/08 20:03:14
prometheusx 
[WIP] et travaux terminés [terminé] court métrage 2020    [1][2] 13 873 02/08 15:28:29
flahaut 
Questions & Réponses [résolu] Générique, sous-titres etc 3 150 02/08 09:18:02
Corpia 
Questions & Réponses [résolu] Scène prend la couleur du fond    [1][2] 11 285 02/08 08:20:32
Arielboid 
Questions & Réponses [non résolu] Problele d'addon 0 115 02/08 01:52:30
nayther 
Questions & Réponses Addon pour textures procedurales 1 109 01/08 12:22:52
moonboots 
Questions & Réponses hair densité sélection de polys 9 247 30/07 23:18:21
lenogre 
Questions & Réponses [résolu] graph editor et location key frame 7 211 30/07 16:41:18
math_ 
Questions & Réponses les graphs editor :/ 4 195 30/07 11:19:07
prometheusx 

Qui est en ligne
154 utilisateur(s) en ligne (dont 103 sur Forums)

Membre(s): 0
Invité(s): 154


plus...
Nouveaux membres
EleanorSca 9/8/2020
BernardMet 9/8/2020
BraydenMon 9/8/2020
BarryKime0 9/8/2020
KLBJed7325 9/8/2020
Carma16S80 9/8/2020
Eugenia961 9/8/2020
DaniellaEg 9/8/2020
LeathaA137 9/8/2020
Candra06C1 9/8/2020
Dernier Ajout
mirages-preview~0.jpg

Evènements à venir
Aou 13
Anniversaire Siskas
Sep 8
Anniversaire de ang
Nov 18
Anniversaire de RichDeg
plus 266 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2020 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445