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 Modélisation d'un monument pour casque de réalité virtuelle 2 19 Aujourd'hui 11:06:32
Thewada 
Questions & Réponses [non résolu] Objets invisible dans la camera view 3 35 Aujourd'hui 11:03:28
Rimpotche 
Questions & Réponses [résolu] Copier propiétés UV d'une face à une autre 4 56 Aujourd'hui 10:24:51
Rimpotche 
[WIP] et travaux terminés [WIP] Teeny Tiny - Story    [1][2][3]...[6] 51 4307 Aujourd'hui 09:37:38
Bibi09 
Questions & Réponses Fps blender 7 41 Hier 22:55:32
Bibi09 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS horreur - Première version disponible !    [1][2][3]...[59] 582 98788 Hier 20:47:54
Bibi09 
Questions & Réponses "Mirrorer" un objet et merger les vertices 6 38 Hier 17:29:00
moonboots 
Questions & Réponses [non résolu] Problème de grésillement des textures lors de l’animation 2 51 Hier 14:38:41
Rimpotche 
The Blender Clan 'tchat Achetez de véritables ielts, toeic, toefl (professionaldocuments5@gmail.com) pmp, pte, visas 0 50 Hier 12:49:44
WilliamsLawson 
Hors Sujet !! Achetez de véritables ielts, toeic, toefl (professionaldocuments5@gmail.com) pmp, pte, visas 0 15 Hier 12:47:09
WilliamsLawson 
Questions & Réponses [résolu] Diminuer le nombre de faces 3 70 Hier 11:21:18
Horemheb 
Questions & Réponses Comment nettoyer le LNA ? 6 101 Hier 07:45:07
moonboots 
Questions & Réponses Je bloque sur la modélisation de ce verre! Avez-vous une solution? 9 365 10/08 20:57:57
JaAlVir657 
Questions & Réponses Fractal et nombre de vertice 0 35 10/08 20:10:30
kimlicrea 
[WIP] et travaux terminés [WIP] Tutoriel vidéo et création de mon prochain court métrage 5 280 09/08 20:25:01
Meltingman2 
Questions & Réponses switch entre IK/FK 4 74 08/08 18:54:05
prometheusx 
Questions & Réponses [non résolu] cloth: déformation bizzarre au rendu 3 101 07/08 09:21:18
Arielboid 
Questions & Réponses les cheveux longueur 1 84 06/08 19:53:18
Rimpotche 
Questions & Réponses ADDON MB - Lab 0 88 06/08 15:29:23
GI-jo13 
Questions & Réponses [résolu] en sculpt mode 5 237 04/08 18:21:10
prometheusx 

Qui est en ligne
196 utilisateur(s) en ligne (dont 159 sur Forums)

Membre(s): 8
Invité(s): 188


Thewada, Anarchy62, YasminCard, Munkinz, TameraBgz1, SherylFitz, goeland, Rimpotche, plus...
Nouveaux membres
AmieJki732 12/8/2020
SusannaRam 12/8/2020
LakeishaPo 12/8/2020
MariCharle 12/8/2020
AndresKepe 12/8/2020
JodiSantor 12/8/2020
MinnieBira 12/8/2020
LorieLzu43 12/8/2020
WilliemaeP 12/8/2020
JamikaWhee 12/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