Programmation python dans le BGE
OverdOzed
Inscrit:
19/03/2016 16:30
De Belgique
Post(s): 1436
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): 1436
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): 1436
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): 1436
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): 1436
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): 1436
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 Blender 2.8 dupliquer un cylindre sans deformation le long d une courbe    [1][2][3] 28 400 Hier 17:57:31
Rimpotche 
Questions & Réponses Ciel sans skybox ou skydome ? 7 109 Hier 15:37:51
Bibi09 
Questions & Réponses Problème de rendu ( novice ) 3 54 Hier 11:39:10
Rimpotche 
Questions & Réponses Enlever les reflets des arbres dans le shader glass? 7 198 Hier 11:14:01
Bibi09 
[WIP] et travaux terminés [WIP] Teeny Tiny - Story 6 390 11/12 22:40:12
Bibi09 
Moteur de jeu GameBlender et alternatives [non résolu] Modifier un visage - ajouter machoire    [1][2] 13 595 11/12 12:37:06
Redstar 
[WIP] et travaux terminés [terminé] Modélisation et Animation d'un Bulldozer 5 378 11/12 12:29:38
Redstar 
Questions & Réponses Conversion de textures "cycle" en textures "Eevee" 1 66 10/12 22:01:35
Rimpotche 
Questions & Réponses Rigging mécanique 2 92 10/12 19:36:44
mapleberry 
Questions & Réponses [résolu] Utilisation carte graphique 6 279 10/12 14:29:50
HarDrive 
Le coin des geeks information sur taille prise en memoire par le projet pour choix GPU    [1][2][3] 21 948 10/12 11:58:49
papillon 
Questions & Réponses Faire un bonhomme mou 1 92 09/12 19:17:57
Bibi09 
The Blender Clan 'tchat Ré-ouverture de mon site 0 77 09/12 18:51:46
thierry_st_malo 
Python & Plugins [WIP] Créer son propre launcher de jeux. 1 119 09/12 18:08:00
Redstar 
Questions & Réponses Combinaison de modèles 3d 1 78 09/12 13:27:47
Rimpotche 
The Blender Clan 'tchat Presentation 1 79 08/12 23:21:59
G-tout-court 
Questions & Réponses modélisation 2.81 1 100 08/12 21:31:01
Gilead_Maerlyn 
[WIP] et travaux terminés [WIP] Bataille Navale // Animation 3d    [1][2][3][4] 33 3522 08/12 13:06:42
ju 
Questions & Réponses découpage du maillage pendant l'animation 1 99 07/12 18:26:01
moonboots 
[WIP] et travaux terminés [WIP] Goatster 6 402 07/12 17:02:39
Mercer 

Qui est en ligne
68 utilisateur(s) en ligne (dont 45 sur Forums)

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


plus...
Nouveaux membres
Alisa36620 13/12/2019
DeliaKoch 13/12/2019
DixieRuben 13/12/2019
KandiMckni 13/12/2019
UIUWillard 13/12/2019
FannySpeer 13/12/2019
Christiane 13/12/2019
LavinaTxh 13/12/2019
TeresitaHi 13/12/2019
IngeborgSc 13/12/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