(1) 2 3 »


Mini Map
Fou Furieux du Clan
Inscrit:
06/07/2010 10:55
Post(s): 225
Rebonjour,
C'est encore moi et oui j'essaye d'avancer mais j'ai de plus en plus besoin de Script pour réussir se que j'entreprends.
Je vous souhaite d'abord une très bonne année 2011
Sinon, comme dis dans le titre j'essaye de faire une minimap (j'ai trouvé un script le fessant mais il coupe l'écran de jeu en 2 (en haut une camera en Orthographique qui suit l'homme de haut et en bas de l'écran une camera a la première personne).
Cependant j'aimerais faire une minimap en haut a droite en HUD (maintenant que j'ai compris comment sa marche, je trouve sa vraiment utile )

Après avoir réfléchi, l'idée serait de:
-> Faire un Imprime Ecran de la scène en vue de haut, en faire une texture et l'appliqué sur un plan
-> Mettre une IcoSphere verte a la place de mon personnage et des IcoSphere rouge a l'emplacement de mes "Ennemies" (au dessus du plan avec la texture)

Le problème est: Comment faire pour que mon IcoSphere suive les coordonnée (x;y) de mon cube.
Après avoir suivie un tutoriel sur les variables globales (http://www.highspeedracer.webou.net/ble_python.php?tuto=Les%20variables%20globales), je me dis que je devrais me servir de ça pour transmettre les données d'un objet d'une scène à un objet d'une autre scène.
Cependant je n'ai pas très bien compris comment sa marche...

Donc voila en gros: Je ne connais vraiment rien à Python et j'aimerais savoir comment faire ceci...
Si vous disposez d'un Script fessant cela sa m'intéresse aussi mais j'aimerai aussi comprendre comment il est fait pour essayé d'apprendre le Language python par la pratique .

Voila, merci d'avance
Edit: Désolé pour l'enchainement de Topic...

Contribution le : 04/01/2011 17:47
Créer un fichier PDF de la contribution Imprimer


Re: Mini Map
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
Citation :
j'ai trouvé un script le fessant mais il coupe l'écran de jeu en 2

Je ne connais pas ce script, mais je pense connaître la technique employée. Elle te permet très simplement de modifier la taille des différents rendus.
Donc de là, c'est très simple de le mettre en en petit dans un coin.

Citation :
Le problème est: Comment faire pour que mon IcoSphere suive les coordonnée (x;y) de mon cube.

Pour moi, les variables globales sont ici superflues.
Tu n'as pas besoin de passer par une autre scène en fait. Comme ta caméra pour la carte est en ortho, si les sphères ne sont pas juste sur les objets mais juste alignées sur les axes X et Y, ça fonctionne. Ensuite, pour ne pas les voir dans la caméra de jeu, il suffit que ces sphères soient par exemple très haut, au-dessus de la skybox. Ainsi, on ne le verra que dans la minimap.
Après, pour placer ces sphères, c'est pas bien dur. Je te fait le script pour le personnage principal et tu devrais réussir à faire la suite, à condition d'avoir compris ce script :
# On importe le module propre au BGE
from bge import logic as gl # 2.5
gl = GameLogic # 2.49

# Parametres #
x, y, z = 0, 1, 2 # C'est plus parlant d'utiliser des x, y, z que des 0, 1, 2 pour les positions
altitude = 100 # Hauteur des spheres
sphereV_nom = "sphere_verte" # Nom de l'objet sphere verte
joueur_nom = "joueur" # Nom de l'objet joueur
# #

# Recuperation de la scene dans laquelle a ete lance le script (la scene de jeu, pas de HUD !)
scene = gl.getCurrentScene()

# Recuperation de la liste des objets
objlist = scene.objects

# Recuperation de l'objet sphere verte
sphereV = objlist[sphereV_nom] # 'sphereV_nom' est mis sans guillemets car c'est le nom d'une variable et non le nom de l'objet.
# Si on avait voulu mettre le nom de l'objet, il aurait fallu des guillemets ("" ou '')

# Recuperation de l'objet joueur
joueur = objlist[joueur_nom]

# Position du joueur
pos = joueur.position

# Definition de la position de la sphere verte
sphereV.position = [pos[x], pos[y], altitude] # Sans la ligne 5 (x, y, z = 0, 1, 2), il aurait fallu
# mettre "sphereV.position = [pos[0], pos[1], altitude]" avec des chiffres plutot que des
# lettres x, y, z mais là x=0, y=1 et z=2 donc ça revient au meme !

Essaye vraiment de comprendre ce code, sinon tu ne progresseras pas. Je ne le fais pas pour que tu l'utilises bêtement !

Contribution le : 04/01/2011 20:54
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer


Re: Mini Map
Fou Furieux du Clan
Inscrit:
06/07/2010 10:55
Post(s): 225
Merci beaucoup pour ce code, je l'ai "étudié" mais il y a quelques trucs que je n'ai pas bien saisie...

Quand tu dis:
sphereV_nom = "sphere_verte" # Nom de l'objet sphere verte
joueur_nom = "joueur" # Nom de l'objet joueur

Ici je comprends pas bien a quoi sert ces lignes, enfin c'est surtout : sphereV_nom que j'ai pas compris, sa désigne quoi?

Après quand tu dis :
# Recuperation de la scene dans laquelle a ete lance le script (la scene de jeu, pas de HUD !)
scene = gl.getCurrentScene()

Si par exemple j'ai une scène qui s'apelle: "Alpha"
Cela donnera : Alpha = gl.getCurrentScene() ?

Voila, le reste je pense avoir compris et merci d'avoir mis les # pour m'expliquer chaque ligne.

Contribution le : 04/01/2011 21:08
Créer un fichier PDF de la contribution Imprimer


Re: Mini Map
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
Citation :
Si par exemple j'ai une scène qui s'apelle: "Alpha"
Cela donnera : Alpha = gl.getCurrentScene() ?

Je crois que tu n'as pas vraiment saisi le principe de variable...
"scene = gl.getCurrentScene()" enregistre dans une variable nommée "scene". Mais j'airais tout aussi bien pu l'appeler "pomme_vert", n'importe quel nom fonctionne du moment qu'il ne contient que des caractères alphanumériques ou l'underscore et qu'il ne commence pas par un chiffre. Ce nom est totalement arbitraire.
C'est exactement comme si je faisait machin=5 sauf que "scene" n'est pas un chiffre mais un objet de type scene du bge.
Cette ligne récupère la scène dans laquelle a été lancé le script, pas besoin de donner son nom !

Citation :
Quand tu dis:
sphereV_nom = "sphere_verte" # Nom de l'objet sphere verte
joueur_nom = "joueur" # Nom de l'objet joueur

Ici je comprends pas bien a quoi sert ces lignes, enfin c'est surtout : sphereV_nom que j'ai pas compris ?

Là encore, je crée simplement des variables.
J'enregistre dans un coin de mémoire vive que je nomme, par exemple, "sphereV_nom" la chaîne de caractère "sphere_verte". Mais attention, c'est une simple chaîne de caractère, rien de plus qu'un texte, ce n'est en aucun cas un objet.
L'objet est récupéré par la suite comme ceci :
sphereV = objlist[sphereV_nom]
Ici, on enregistre dans la variable "sphereV" un objet en le prenant de la liste des objets de la scène que l'on a nommée au-dessus "objlist" (on aurait aussi bien pu dire "liste_des_objets_de_la_scene"). Dans cette liste d'objets, on récupère un objet en particulier grâce à son nom qui sert de clef. Mais ici je n'entre pas directement son nom, je donne à la place une variable avec le nom enregistré dedans sous forme de chaîne de caractères.
En fait, j'aurais pu faire ceci :
sphereV = objlist["sphere_verte"]
où "sphere_verte" est le nom de l'objet mais ma méthode te permet, si tu changes le nom de l'objet, de ne pas avoir à le modifier partout dans le code : tu le modifie dans le cadre des paramètres, au haut, et puis c'est tout, pas le peine de le chercher 3 plombes ! Enfin là, c'est pas bien avantageux puisque le nom n'est utilisé qu'une seule fois et que le code ne fait que quelques lignes, mais tu verras après, quand ça deviendra plus long.

Pour le moment, tes connaissances me semblent vraiment bancales, mais ça viendra, je suis confiant sur ce point.
Il faut juste que tu sois curieux, que tu cherches à comprendre tout ce qui se passe.

Contribution le : 04/01/2011 21:24
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer


Re: Mini Map
Fou Furieux du Clan
Inscrit:
06/07/2010 10:55
Post(s): 225
Ahhh merci ! franchement je comprends beaucoup mieux, surtout que ce genre de "phrases" je les retrouve dans les différents scripts que j'utilise donc sa me permettra de mieux les comprendre.
Et oui, mes connaissances sont très bancales... mais je me suis mis a lires les tutoriels des différents liens que tu m'as donné

Pour ce qui est de la fin: 0 , 1 et 2 correspondent TOUJOURS à l'axe des x , y , z sur Blender? Sauf si on les assignent à des lettres comme tu l'as fais.

Et si j'ai bien compris, je dois tout de même gardé une partie de l'autre Script afin d'affiché ma mini carte en haut en droite?
Je pense avoir trouvé la partie correspondante a séparé 2 Partie de la fenêtre
# Viewport size
def viewportSize(gameScreen, playerCams, obj):

	# game window width & height
	width = gameScreen[0]
	height = gameScreen[1]

	# player cameras
	player1 = playerCams[0]
	player2 = playerCams[1]
	
	
	# Check for propety named Vertical
	if obj.has_key("Vertical") == True:
	
		# viewports side by side?
		if obj["Vertical"] == True:
		
			# Player 1 viewport: left side
			left_1 = 0; bottom_1 = 1; right_1 = width/2; top_1 = height
			   
			#  Player 2 viewport: right side
			left_2 = 1; bottom_2 = 1; right_2 = width; top_2 = height 
		
		# vertical set to false
		else:
			# Player 1 viewport: top half
			left_1 = 0; bottom_1 = height/1; right_1 = width; top_1 = height
			   
			#  Player 2 viewport: bottom half
			left_2 = 0; bottom_2 = 0; right_2 = width; top_2 = height/2


	# set to default viewports size
	else:
	
		# Player 1 viewport: top half
		left_1 = 0; bottom_1 = height/2; right_1 = width; top_1 = height
		   
		#  Player 2 viewport: bottom half
		left_2 = 0; bottom_2 = 0; right_2 = width; top_2 = height/2
	
	
	# set player viewports
	player1.setViewport( left_1, bottom_1, right_1, top_1)
	player2.setViewport( left_2, bottom_2, right_2, top_2)

Contribution le : 04/01/2011 21:41
Créer un fichier PDF de la contribution Imprimer


Re: Mini Map
OverdOzed
Inscrit:
24/07/2008 00:45
De Paris
Post(s): 3447
Citation :
Pour ce qui est de la fin: 0 , 1 et 2 correspondent TOUJOURS à l'axe des x , y , z sur Blender?

Oui. La position retournée par obj.position est ce que l'on appelle une liste. C'est comme une variable, mais avec des cases. Si tu veux, tu peux imaginer un meuble à tiroirs. Chaque tiroir contient une variable. Pour accéder à un tiroir, il faut mettre, après le nom de la liste, un index. L'index est le numéro de tiroir. Attention cependant, la numérotation commence à 0 !
Donc on accède à la première case comme ceci :
print(liste[0]) # Affiche la première case de la liste

Une liste se crée très facilement !
>>> liste = ["bla", 10.75, 7, objet] # On peut mettre ce qu'on veut dedans !
>>> liste.append("case 4 = index 3") # On peut ajouter des cases
>>> liste[1] = 7.5 # On modifie une case
>>> print(liste) # On affiche la liste
["bla", 7.5, 7, objet, "case 4 = index 3"]
>>> print(liste[1:3]) # On affiche la liste de la case 2 (index 1) à la case 4 (index 3) non incluse
[7.5, 7]
>>> print(liste[-1]) # On affiche la dernière case
case 4 = index 3


Voilà, les listes ne sont pas propres à Blender, donc la position est juste une liste dans laquelle il y a les trois coordonnées de l'objet dans l'ordre XYZ.
Donc pos[0] donne la coordonnée X. Moi, lorsque j'ai dit que x=0, alors si je fait pos[x], Python va remplacer x par sa valeur (0) et faire pos[0], tout simplement.
D'ailleurs, faire "print(obj.position)" te servira sûrement et tu verras bien que c'est une liste (ou un objet Vecteur en 2.5 mais bon, tu peux l'utiliser de la même façon pour le moment).


Citation :
Je pense avoir trouvé la partie correspondante a séparé 2 Partie de la fenêtre

C'est bien ça.
Pour ne pas inutilement surcharger, tu peux retirer ces conditions :
# Check for propety named Vertical
if obj.has_key("Vertical") == True:

# viewports side by side?
if obj["Vertical"] == True:


Et donc remplacer ceci :
# Check for propety named Vertical
	if obj.has_key("Vertical") == True:
	
		# viewports side by side?
		if obj["Vertical"] == True:
		
			# Player 1 viewport: left side
			left_1 = 0; bottom_1 = 1; right_1 = width/2; top_1 = height
			   
			#  Player 2 viewport: right side
			left_2 = 1; bottom_2 = 1; right_2 = width; top_2 = height 
		
		# vertical set to false
		else:
			# Player 1 viewport: top half
			left_1 = 0; bottom_1 = height/1; right_1 = width; top_1 = height
			   
			#  Player 2 viewport: bottom half
			left_2 = 0; bottom_2 = 0; right_2 = width; top_2 = height/2


	# set to default viewports size
	else:
	
		# Player 1 viewport: top half
		left_1 = 0; bottom_1 = height/2; right_1 = width; top_1 = height
		   
		#  Player 2 viewport: bottom half
		left_2 = 0; bottom_2 = 0; right_2 = width; top_2 = height/2


Par juste ça :
# Player 1 viewport: top half -> devient le rendu principal en plein ecran donc on met bottom_1 et left_1 à 0 et non à la moitié de l'écran.
# les autres (right et top) sont au max. On est donc en plein ecran.
left_1 = 0; bottom_1 = 0; right_1 = width; top_1 = height
		   
#  Player 2 viewport: bottom half -> devient la minimap. Mettons la en haut a droite.
# Pour cela, on va faire un truc proportionnel à la taille de l'ecran, ca sera bien mieux et plus simple.
# Les valeurs que j'ai mises sont arbitraires, tu peux les changer. Je dirais même que tu dois les bidouiller
# parce que 1 j'ai rien teste donc c'est sans doute completement a cote de la plaque et 2 il faut toujours modifier
# pour voir ce qui change et comprendre.
left_2 = width/5; bottom_2 = height/5; right_2 = width/10; top_2 = height/5

Contribution le : 04/01/2011 23:37
_________________
Tuto MaPZone
Créer un fichier PDF de la contribution Imprimer


Re: Mini Map
Fou Furieux du Clan
Inscrit:
06/07/2010 10:55
Post(s): 225
Merci pour le script, je pense l'avoir compris (il faut dire que les explications m'ont bien aidé )
Je l'ai essayé en remplaçant cela mais après vérification de la console il y a une erreur

Il me dit que :"width" et "height" ne sont pas défini
Dans ces phrases:
-> left_1 = 0; bottom_1 = 0; right_1 = width; top_1 = height
-> left_2 = width/5; bottom_2 = height/5; right_2 = width/10; top_2 = height/5

Pourtant dans la partie qui change pas on dit :
width = gameScreen[0]
height = gameScreen[1]

D'ailleurs quand on dit: Width = gameScreen[0] cela veut dire que la largeur correspond a la totalité de l'écran?
où Width a été désigné grâce a cette phrase (plus haut dans le script): width = Rasterizer.getWindowWidth()
et gameScreen par celle ci: gameScreen = gameWindow()

(L'erreur n'apparait pas quand je ne change rien au script, de base, je ne comprends pas trop la )
Et une autre erreur bizarre dans ma console :


Il est entrain de me dire que je ne dispose pas de Python?
Puis il me dit : Python 2.6.2 pourtant c'est la version 3.1 d'installé sur mon ordinateur ...

Contribution le : 05/01/2011 07:34
Créer un fichier PDF de la contribution Imprimer


Re: Mini Map
Ze Grand Manitou
Inscrit:
24/07/2003 14:50
De la Région Parisienne
Post(s): 21822
Il faut installer la même version majeure de Python que celle avec laquelle Blender a été compilé, sinon ça ne peut pas fonctionner. Là il te dit qu'il a été compilé avec la 2.6.2, donc il faut absolument installer Python 2.6 . Pas 2.5, pas 2.7, et encore moins la 3.1.
Mais de toute façon, je ne vois aucun appel à un module externe au mini Python fourni avec ton Blender, donc l'erreur ne vient pas du manque de Python externe.

Par rapport à ton problème, fais bien attention aux évolutions de l'API du BGE :
http://www.blender.org/documentation/250PythonDoc/

On y apprend que pour avoir les informations de largeur et hauteur de la fenêtre, il faut utiliser bge.render.getWindowWidth() et bge.render.getWindowHeight() :
http://www.blender.org/documentation/250PythonDoc/bge.render.html

Donc si tu assignes ces deux méthodes aux bonnes variables, ça devrait le faire :
width = bge.render.getWindowWidth()
height = bge.render.getWindowHeight()

@+

Contribution le : 05/01/2011 08:47
_________________

Mickaël Guédon | Site pro : www.mickaelguedon.com | Fondateur du Blender Clan : www.blenderclan.org
Auteur de Formations Blender chez Elephorm
Créer un fichier PDF de la contribution Imprimer


Re: Mini Map
Fou Furieux du Clan
Inscrit:
06/07/2010 10:55
Post(s): 225
Merci Bobibou d'avoir pris le temps de regarder ça, en effet l'erreur précédente disparait... mais une nouvelle apparait.
Je suis allé sur le traducteur pour voir la nature de l'erreur et c'est très mal traduit, je me suis donc renseigné via Google et j'ai pu trouvé que c'est tout simplement parce-que python demande lors des boucles des règles d'indentation et j'aurais donc oublié des Espace ou Tab.


EDIT: J'ai réussi a trouvé d'où vient l'erreur , le TAB avant les 2 phrases était de trop...

Après les remarques de Bobibou et d'Ebrain le script est celui ci:

# Main program
def main():
	
	# get current controller	
	controller = GameLogic.getCurrentController()
	
	# get object the controller is connected to
	obj = controller.owner
	
	# get the size of the game screen
	gameScreen = gameWindow()

	# get player cameras
	playerCams = playerCameras(obj)
	
	# make player 1 camera the active camera
	activeCamera(playerCams)
		
	# set viewport size
	viewportSize(gameScreen, playerCams, obj)
	
	# use viewports
	viewPorts(playerCams, obj)

#####################################################

# Game window
def gameWindow():
	
	# import Rasterizer module
	import Rasterizer
	
	# get width and height of game window
	width = bge.render.getWindowWidth()
	height = bge.render.getWindowHeight()

	
	# return game window size
	return (width, height)

#####################################################

# Player cameras
def playerCameras(obj):
		
	# get the current scene
	scene = GameLogic.getCurrentScene()
	
	# get list in objects in scene
	objList = scene.objects
		
	# get camera 1 name
	cam1_Name = obj["Cam1"]
	
	# get camera 2 name		
	cam2_Name = obj["Cam2"]
	
	# get player cameras
	player1 = objList["OB" + cam1_Name]	
	player2 = objList["OB" + cam2_Name]
	
	# return player cameras
	return (player1, player2)

#####################################################

# Active Camera
def activeCamera(playerCams):

	# get current scene
	scene = GameLogic.getCurrentScene()

	# get player 1 camera
	player1 = playerCams[0]
	
	# make player 1 the active camera
	scene.active_camera = player1


#####################################################

# Viewport size
def viewportSize(gameScreen, playerCams, obj):

	# game window width & height
	width = gameScreen[0]
	height = gameScreen[1]

	# player cameras
	player1 = playerCams[0]
	player2 = playerCams[1]
	
	
# Player 1 viewport: top half -> devient le rendu principal en plein ecran donc on met bottom_1 et left_1 à 0 et non à la moitié de l'écran.
# les autres (right et top) sont au max. On est donc en plein ecran.
left_1 = 0; bottom_1 = 0; right_1 = width; top_1 = height
		   
#  Player 2 viewport: bottom half -> devient la minimap. Mettons la en haut a droite.
# Pour cela, on va faire un truc proportionnel à la taille de l'ecran, ca sera bien mieux et plus simple.
# Les valeurs que j'ai mises sont arbitraires, tu peux les changer. Je dirais même que tu dois les bidouiller
# parce que 1 j'ai rien teste donc c'est sans doute completement a cote de la plaque et 2 il faut toujours modifier
# pour voir ce qui change et comprendre.
left_2 = width/5; bottom_2 = height/5; right_2 = width/10; top_2 = height/5
	
	
# set player viewports
player1.setViewport( left_1, bottom_1, right_1, top_1)
player2.setViewport( left_2, bottom_2, right_2, top_2)

#############################################################

# enable viewports	
def viewPorts(playerCams, obj):

	# get player cameras
	player1 = playerCams[0]
	player2 = playerCams[1]
		
	# use viewports
	player1.useViewport = True
	player2.useViewport = True 

#############################################################

# Run Main Program
main()


Et pour se qui est de passer a la version 2.6.2 , si je désinstalle la version 3.1 il n'y aucun risque de perdre des fichiers ou de ne plus pouvoir les ouvrir?

Merci beaucoup de l'attention que vous portez a se topic .

Contribution le : 05/01/2011 13:40
Créer un fichier PDF de la contribution Imprimer


Re: Mini Map
Ze Grand Manitou
Inscrit:
24/07/2003 14:50
De la Région Parisienne
Post(s): 21822
Il va vraiment falloir faire attention aux identations, il y en a tout un tas de manquantes, et quelques unes en trop.
Je les ai marquées avec soit (IDENTATION MANQUANTE), soit (IDENTATION EN TROP).

# Main program
def main():
	
	# get current controller	
	controller = GameLogic.getCurrentController()
	
	# get object the controller is connected to
	obj = controller.owner
	
	# get the size of the game screen
	gameScreen = gameWindow()
(IDENTATION MANQUANTE)
	# get player cameras
	playerCams = playerCameras(obj)
	
	# make player 1 camera the active camera
	activeCamera(playerCams)
		
	# set viewport size
	viewportSize(gameScreen, playerCams, obj)
	
	# use viewports
	viewPorts(playerCams, obj)

#####################################################

# Game window
def gameWindow():
	
	# import Rasterizer module
	import Rasterizer
	
	# get width and height of game window
	width = bge.render.getWindowWidth()
	height = bge.render.getWindowHeight()
(IDENTATION MANQUANTE)
(IDENTATION MANQUANTE)	
	# return game window size
	return (width, height)

#####################################################

# Player cameras
def playerCameras(obj):
		(IDENTATION EN TROP)
	# get the current scene
	scene = GameLogic.getCurrentScene()
	
	# get list in objects in scene
	objList = scene.objects
		
	# get camera 1 name
	cam1_Name = obj["Cam1"]
	
	# get camera 2 name		
	cam2_Name = obj["Cam2"]
	
	# get player cameras
	player1 = objList["OB" + cam1_Name]	
	player2 = objList["OB" + cam2_Name]
	
	# return player cameras
	return (player1, player2)

#####################################################

# Active Camera
def activeCamera(playerCams):
(IDENTATION MANQUANTE)
	# get current scene
	scene = GameLogic.getCurrentScene()
(IDENTATION MANQUANTE)
	# get player 1 camera
	player1 = playerCams[0]
	
	# make player 1 the active camera
	scene.active_camera = player1


#####################################################

# Viewport size
def viewportSize(gameScreen, playerCams, obj):
(IDENTATION MANQUANTE)
	# game window width & height
	width = gameScreen[0]
	height = gameScreen[1]
(IDENTATION MANQUANTE)
	# player cameras
	player1 = playerCams[0]
	player2 = playerCams[1]
	
	
(IDENTATION MANQUANTE)# Player 1 viewport: top half -> devient le rendu principal en plein ecran donc on met bottom_1 et left_1 à 0 et non à la moitié de l'écran.
(IDENTATION MANQUANTE)# les autres (right et top) sont au max. On est donc en plein ecran.
(IDENTATION MANQUANTE)left_1 = 0; bottom_1 = 0; right_1 = width; top_1 = height
		(IDENTATION EN TROP)
(IDENTATION MANQUANTE)#  Player 2 viewport: bottom half -> devient la minimap. Mettons la en haut a droite.
(IDENTATION MANQUANTE)# Pour cela, on va faire un truc proportionnel à la taille de l'ecran, ca sera bien mieux et plus simple.
(IDENTATION MANQUANTE)# Les valeurs que j'ai mises sont arbitraires, tu peux les changer. Je dirais même que tu dois les bidouiller
(IDENTATION MANQUANTE)# parce que 1 j'ai rien teste donc c'est sans doute completement a cote de la plaque et 2 il faut toujours modifier
(IDENTATION MANQUANTE)# pour voir ce qui change et comprendre.
(IDENTATION MANQUANTE)left_2 = width/5; bottom_2 = height/5; right_2 = width/10; top_2 = height/5:
	
	
	# set player viewports
	player1.setViewport( left_1, bottom_1, right_1, top_1)
	player2.setViewport( left_2, bottom_2, right_2, top_2)

#############################################################

# enable viewports	
def viewPorts(playerCams, obj):
(IDENTATION MANQUANTE)
	# get player cameras
	player1 = playerCams[0]
	player2 = playerCams[1]
		
	# use viewports
	player1.useViewport = True
	player2.useViewport = True 

#############################################################

# Run Main Program
main()


En Python, les identations ne sont pas du décor et ont un caractère fonctionnel. Par exemple, dans le cadre de la définition d'une fonction (qui commence par le mot clé "def"), et bien tout ce qui est identé en dessous fait partie de cette fonction. Et à partir du moment où tu reviens au niveau du mot clé "def", c'est à dire en enlevant une identation, et bien cela met fin à la déclaration de la fonction, et tout ce qui suivra n'en fera pas partie.

Bref, ouvre l'oeil.
@+

Contribution le : 05/01/2011 13:52
_________________

Mickaël Guédon | Site pro : www.mickaelguedon.com | Fondateur du Blender Clan : www.blenderclan.org
Auteur de Formations Blender chez Elephorm
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant
(1) 2 3 »




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
Graphisme alternatif faire de la bd avec blender    [1][2] 10 185 Hier 20:06:43
blend74 
[WIP] et travaux terminés Nature - Court-métrage    [1][2] 14 545 Hier 12:44:09
moonboots 
Hors Sujet !! Sinoceratops project - Ateliers suivies de A à l'Animation 2 42 Hier 10:27:51
debutant 
Questions & Réponses [résolu] Probleme Papercraft sous Blender 7 147 19/06 21:44:21
Larryon 
Python & Plugins [terminé] City pack Cars pour Blender 1 65 18/06 18:07:21
meltingman 
Hors Sujet !! les tutos de Moonboots    [1][2][3]...[15] 143 9899 18/06 10:12:37
yawdpwal 
Questions & Réponses prb tuto crash car/rigid body    [1][2] 12 176 17/06 18:54:54
belomaker 
The Blender Clan 'tchat Avenir du blender clan    [1][2][3]...[23] 222 26126 17/06 10:34:03
Riggelm 
Graphisme alternatif Un court-métrage apocalyptique en 2D ! 3 2250 16/06 18:23:28
moonboots 
Dessin traditionnel Dessins - BlendX 8 14242 16/06 16:41:23
blend74 
Graphisme alternatif Monster Mash    [1][2] 15 352 16/06 16:22:01
blend74 
Questions & Réponses [résolu] Placer mon world 7 99 16/06 09:13:57
Lylo 
Questions & Réponses [non résolu] animation : décalage d'un objet avec "Follow path"    [1][2] 12 162 16/06 05:57:44
blendinfos 
Questions & Réponses Different move value for parent or child - Distances différentes pour un parent ou un enfant 0 154 16/06 04:12:14
Gazpart 
Moteur de jeu GameBlender et alternatives [WIP] DeadSigns FPS horreur - Version alpha disponible + discord    [1][2][3]...[67] 667 139145 15/06 08:58:37
Hook 
Questions & Réponses [non résolu] Plusieurs object qui avance sur une ligne trajectoire 9 550 14/06 18:29:34
blendinfos 
Questions & Réponses [non résolu] animer 2 objets ensemble, puis les séparer 2 67 14/06 11:43:57
blendinfos 
[WIP] et travaux terminés modelisation et animation de petits persos 9 272 14/06 10:20:03
blend74 
[WIP] et travaux terminés [terminé] invitation pour l'avant première de "BRUMES"    [1][2] 15 986 14/06 04:30:41
meltingman 
The Blender Clan 'tchat Blender 2.8x : Actus, tests, feedback..    [1][2][3]...[10] 91 47052 14/06 04:29:58
meltingman 

Qui est en ligne
197 utilisateur(s) en ligne (dont 157 sur Forums)

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


plus...
Nouveaux membres

Nemo
11/3/2021
qingjie 10/3/2021
Kask909 9/3/2021
marie-antoinette 7/3/2021
Bugs 7/3/2021
lolorogli75 4/3/2021
Flagiel 4/3/2021
thedeathclown 1/3/2021
Littlespoon 28/2/2021
luxperpetua 27/2/2021
Dernier Ajout
2020-09-24.jpg

Evènements à venir
Jui 30
Anniv des Jedi :-D
Jui 10
BUG de Lyon
Jui 23
Anniv du BlenderClan !
plus 255 plus d'élément(s)
 Par Mickaël Guédon [ebrain] © 2003-2021 The Blender Clan - hébergé par TuxFamily - Site déclaré à la CNIL sous le numéro 1155445