Programmation python dans le BGE
OverdOzed
Inscrit:
19/03/2016 16:30
De Belgique
Post(s): 1416
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 17:56
_________________
Mon projet jeu vidéo
Mes tutos
Créer un fichier PDF de la contribution Imprimer


Re: Programmation et liens entre blend
Touriste
Inscrit:
15/11/2017 14: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 10:25
Créer un fichier PDF de la contribution Imprimer


Re: Programmation et liens entre blend
OverdOzed
Inscrit:
19/03/2016 16:30
De Belgique
Post(s): 1416
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 11:21
_________________
Mon projet jeu vidéo
Mes tutos
Créer un fichier PDF de la contribution Imprimer


Re: Programmation et liens entre blend
OverdOzed
Inscrit:
19/03/2016 16:30
De Belgique
Post(s): 1416
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 17:01
_________________
Mon projet jeu vidéo
Mes tutos
Créer un fichier PDF de la contribution Imprimer


Re: Programmation python dans le BGE
OverdOzed
Inscrit:
29/04/2007 20: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 03: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 16:30
De Belgique
Post(s): 1416
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 13:11
_________________
Mon projet jeu vidéo
Mes tutos
Créer un fichier PDF de la contribution Imprimer


Re: Programmation python dans le BGE
OverdOzed
Inscrit:
29/04/2007 20: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 15: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 16:30
De Belgique
Post(s): 1416
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 12:02
_________________
Mon projet jeu vidéo
Mes tutos
Créer un fichier PDF de la contribution Imprimer


Re: Programmation python dans le BGE
OverdOzed
Inscrit:
19/03/2016 16:30
De Belgique
Post(s): 1416
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 13:12:36
_________________
Mon projet jeu vidéo
Mes tutos
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 Comment retrouver les textures d'un mesh créé avec 2.79 dans 2.80 et les faire apparaitre 0 4 Aujourd'hui 05:02:32
papillon 
[WIP] et travaux terminés Goatster 0 7 Aujourd'hui 02:21:07
Rimpotche 
Le coin des geeks config pour projet d'environ 30 000 000 de vertex 8 367 Aujourd'hui 00:31:26
papillon 
[WIP] et travaux terminés Une locomotive ...    [1][2] 10 232 Aujourd'hui 00:20:48
busanga 
Questions & Réponses Display number of users of this data 5 102 19/11 20:57:13
Machaon 
Questions & Réponses UV editing, mes translations sont saccadées. 2 82 19/11 19:49:58
Homarus 
Questions & Réponses [non résolu] Livre Blender 2.8 7 1036 19/11 16:25:56
Mikeyavel 
Questions & Réponses problème shader emission 2.8 4 99 19/11 13:50:32
moonboots 
Questions & Réponses Longueur d'une courbe de béziers ? 7 336 19/11 12:25:59
Eleonor-e 
Questions & Réponses [résolu] Découper un modèle sur Blender 3 106 19/11 09:59:22
Twi7 
Le coin des geeks Fonctionnement blender avec plusieurs cartes graphiques 2 100 18/11 15:01:06
Bibi09 
GIMP La crème de Gimp    [1][2][3][4] 33 38815 18/11 12:48:39
jackwilshere 
Questions & Réponses fusionner plusieurs matériels en un seul 1 88 18/11 11:14:18
moonboots 
Questions & Réponses Labels 3 154 17/11 22:45:48
Bibi09 
Questions & Réponses [résolu] Impossible de faire un bevel regulier 9 324 16/11 22:33:51
pat72 
Moteur de jeu GameBlender et alternatives [résolu] Programmer un archer à cheval    [1][2][3][4] 34 1212 16/11 11:38:45
Bibi09 
Questions & Réponses Trace bizzarre sur un objet 6 169 15/11 14:10:05
moonboots 
Python & Plugins [WIP] Tracer une courbe et obtenir son équation 7 176 15/11 11:51:13
busanga 
Questions & Réponses Besoin d'aide simulation de vent sur des plantes (système particules) 0 260 14/11 17:50:55
B3nD 
Questions & Réponses Contrainte en édition 1 123 14/11 13:57:05
naeco 

Qui est en ligne
30 utilisateur(s) en ligne (dont 19 sur Forums)

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


plus...
Nouveaux membres
RosalindU7 21/11/2019
RefugiaZ01 21/11/2019
MarielHagg 21/11/2019
SuzanneY02 21/11/2019
IvoryHerri 21/11/2019
Cathern952 21/11/2019
JamieHnw38 21/11/2019
ErickaEod 21/11/2019
YDXErnie10 21/11/2019
PREMay251 21/11/2019
Dernier Ajout
2019-11-05 01.JPG

Evènements à venir
Dec 29
Anniversaire d'ebrain
Jan 11
BUG de Lyon
Fev 15
Anniversaire de Dany
plus 277 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2019 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445