martes, 4 de marzo de 2014

Cómo utilizar Python scripting en Blender 2.6 para hacer un movimiento del coche


En BGE Python tutorial de este principiante usted aprenderá cómo utilizar Python scripting en Blender 2.6 para hacer un movimiento del coche, aumento de la velocidad y detenerse. Este tutorial te enseñará los conceptos básicos de Python scripting para el motor de juego de Blender, incluido el acceso a la información y el cambio de la lógica de ladrillo a través de secuencias de comandos. Antes de empezar, si eres nuevo en Python y para información más general sobre Python incluyendo el formato, las declaraciones, las funciones, bla, bla, visita Guía para principiantes Para Python. Ninguna de las guías aquí se necesita mucho tiempo para ir a través, y usted aprenderá todo lo que necesita saber para empezar en un día. El resto es el aprendizaje mediante la experiencia y la necesidad a través de sus propios proyectos. Pero incluso si usted no sabe una sola cosa sobre Python, este tutorial es fácil de seguir.

Haga clic aquí para descargar el archivo de mezcla. Este archivo es el producto terminado y no es necesario descargar el fin de hacer el tutorial. Todos los modelos y texturas empaquetados en el archivo de mezcla son suyo para hacer lo que quieras.
http://www.cgmasters.net/tutorials/car.blend

Ajuste de las cosas

Tengo 3 ventanas creadas en Blender , parte superior izquierda es la Vista 3D , arriba a la derecha es el Editor de texto, y que abarca la parte inferior es lógica del juego . Su licuadora debe ser la misma para este tutorial. Una vez que tenga estas ventanas en vista que podemos empezar a crear nuestro pequeño juego . Usted ya debe tener un conocimiento básico de cómo funcionan los ladrillos lógicos antes de leer este tutorial sobre cómo usar python , pero es bastante simple de seguir a lo largo de cualquier manera. Los ladrillos son lógicas en la ventana lógica del juego , con sensores en la izquierda , los controladores en el medio, y los actuadores de la derecha . Los sensores actúan como disparadores para que cuando algo sucede , como se pulsa una tecla o valor de una propiedad cambia , se puede realizar una acción. Controladores te dan un conjunto de opciones que determinan cómo se interpretan o utilizan sensores. Los actuadores que las cosas sucedan cuando se cumplen ciertos parámetros.

Creación de un nuevo script Python

En el editor de texto , cree un nuevo archivo de texto pulsando el botón "Nuevo " en la cabecera , y cambiarle el nombre a " cubeMove " . Antes de escribir cualquier cosa que queremos ver algunas de nuestras opciones visuales . Hay 3 iconos al lado del campo de nombre de secuencia de comandos en el que sólo cambió el nombre de la secuencia de comandos . El primero es números de línea . Haga clic en este para que pueda. Esto simplemente muestra números al lado de cada línea para que usted sepa qué línea del guión que está escribiendo sobre . Esto es esencial para la depuración , porque cuando hay un error en la secuencia de comandos , la consola del sistema le dirá cuál es el número de línea del error está encendido. Los otros dos iconos son para el ajuste de línea , y el resaltado de sintaxis ( que pone de relieve las palabras clave de python y tal, me permitirían esto). Una última cosa que necesitamos es permitir a la consola del sistema . En versiones anteriores de Blender esto era visible por defecto, pero ya no lo es . Aquí es donde todos los datos de scripts y los errores de secuencias de comandos se imprimirá . Para habilitar esto en Windows , vaya al menú Ayuda de la parte superior y seleccione "Sistema Toggle Console" si usted no tiene ya que es visible.
Ahora un poco de scripting real. Copia y pega el código de abajo en su nuevo archivo de script:


print (“hello”)
print () es un simple comando que imprime lo que está en el paréntesis en la consola, en este caso se imprime la palabra hola. Para la secuencia de comandos para ejecutar en realidad y hacer eso, vamos a tener (logic brick)ladrillos lógicos para ejecutarlo . Así que selecciona un objeto en tu escena (el cubo defecto lo hará muy bien si usted no hizo un super coche como yo) y en la ventana Logic Game agregar un siempre sensor y un controlador de python . Conecte estos dos haciendo clic en el pequeño círculo junto al sensor y arrastrándolo hasta el pequeño círculo junto al controlador. En el campo de la escritura del controlador pitón, escriba o seleccione el script cubeMove .

Ahora pase el cursor del ratón sobre la vista 3D y pulse P. Se inicia el juego. Presione Esc para terminar el juego. Compruebe la consola y verás la palabra hola. Su primer guión de éxito! ** Tome nota de que si se cernía sobre la ventana de guión y presionado P , que hubieras escrito P en algún lugar en el guión y lo que hubiera provocado un error . Cualquiera que sea la ventana del ratón sobre es la ventana activa. Este error ocurrirá mucho, así que tenlo presente ! *


Ahora borre la línea de impresión. Pegue la siguiente línea en la parte superior de la secuencia de comandos:

import bge

Esta línea estará en la parte superior de casi todas las secuencias de comandos del juego. El módulo bge contiene todas las funciones de Python para Blender en tiempo real, por lo que es necesario importar este módulo para poder acceder a todas sus funciones para utilizar en nuestros scripts. Añadir en otra línea debajo de eso, lo que hace un mejor uso de la orden de impresión, de manera que la secuencia de comandos es la siguiente:

import bge
 print (dir(bge))

Inicia el juego (pulse p mientras ratón sobre 3D View) y luego mirar a su consola. dir () = directorio si no se ha hecho la conexión. La consola se imprimirá todas las funciones en el módulo bge, más noteably para este tutorial, la lógica, que contiene las funciones que podemos usar para acceder a nuestros ladrillos lógicos y propiedades del objeto. Así que vamos a imprimir el directorio de bge.logic y veamos cuáles son nuestras opciones allí. Haga su guión parezca a continuación: 

import bge 
print (dir(bge.logic))



Por lo tanto, usted debe saber que no sólo se puede imprimir el directorio de bge, pero el directorio de la totalidad de sus funciones, así como bge.logic y todas sus funciones también. Encuentre la función getCurrentController enumerados en la consola. Esto permite acceder al controlador de ladrillo lógica que ejecuta el script. Una vez que accedemos al controlador que podemos acceder a todos los sensores y actuadores conectados a él, e incluso acceder a la información sobre el objeto que posee el controlador. Esta es una función muy muy importante. Ahora cambie la línea de impresión de su script para imprimir el directorio de bge.logic.getCurrentController () ahora, asegurándose de que tiene su propio conjunto de paréntesis al final, de manera que la secuencia de comandos es la siguiente:

import bge 
print (dir(bge.logic.getCurrentController())) 

Inicia el juego y echar un vistazo a la consola. Usted verá un nuevo conjunto de funciones, incluyendo actuadores, sensores y propietario, todos los cuales tienen sus propios directorios que se pueden imprimir también. Toda la información que usted necesita se puede encontrar utilizando dir (). Si alguna vez estás al tanto de cuáles son sus opciones cuando se trabaja con objetos o ladrillos lógicos en Python, puede imprimir simplemente fuera de su directorio que te dice. Tome nota de la capitalización, y asegúrese de que todos los paréntesis están cerrados o que obtendrá errores. 

Scripting para lo real


Así que ya saben acerca de la orden de impresión, directorios de impresión, y usted sabe acerca bge importación. Vamos a pasar a algunas secuencias de comandos del juego real. Borre la línea de impresión y añadir dos líneas de modo que la secuencia de comandos es la siguiente: 

import bge
 cont = bge.logic.getCurrentController() 
own = cont.owner

Echa un vistazo a estas tres líneas . Van a estar más o menos en la parte superior de cada una de las secuencias de comandos del juego y son probablemente las tres líneas más esenciales de código para cualquier guión del juego licuadora.

Voy a empezar por explicar la segunda línea, cont = bge.logic.getCurrentController (). Te lo dije antes lo que la función getCurrentController () trataba. Bueno, aquí acabamos de agregar una línea que tenga acceso al controlador y asigna esa información al cont variable. El nombre de la variable puede ser cualquier cosa que te gusta, pero es una abreviatura como cont , y utilizarlo simplemente por lo que no tenemos que escribir bge.logic.getCurrentController ( ) cada vez que lo necesitemos . Sólo escribimos cont lugar . Asegúrese de poner el conjunto de paréntesis al final . Obtendrá un error si no lo hace .

Ahora en la tercera línea , poseer = cont.owner . Aquí accedemos al propietario del controlador y asigna esa información a una variable. Ahora tenemos acceso al objeto que posee el controlador de python que se ejecuta la secuencia de comandos , en este caso el cubo por defecto (o mi coche impresionante ) . Esto nos da acceso a la información sobre el objeto , más notablemente sus propiedades de juego.

La adición de más ladrillos lógicos


Elimine el sensor siempre y agregar dos sensores de teclado , uno para la tecla de arriba , y otro para la tecla de abajo . Cambiar el nombre de estos sensores para "arriba" y "abajo" . El nombre es importante porque vamos a estar llamando a estos sensores por nombre en el script de python . Para el sensor de "arriba" , también con la opción " Pulse " para que este sensor registra sólo una vez cuando se pulsa la tecla , de lo que también se registra una segunda vez cuando se suelta la tecla . Toque asegura un sensor sólo se desencadena una vez. Conecte ambos sensores al controlador python , por lo que la secuencia de comandos Python se ejecuta cuando se presiona uno de los botones. Ahora agregue un actuador de movimiento demasiado y conectarlo al controlador. Cambie el nombre del actuador para " mover " . Vamos a utilizar este actuador para mover el coche cuando se pulsa el botón de arriba.


Ahora vamos a añadir cuatro líneas más debajo propia own = cont.owner para que podamos acceder a nuestros nuevos sensores y actuadores en el guión, y estamos creando otra variable de la velocidad. Así que su escritura se parece esto agregando la parte inferior cuatro líneas:

import bge
 cont = bge.logic.getCurrentController() 
own = cont.owner 
move = cont.actuators["move"] 
pressup = cont.sensors["up"] 
pressdown = cont.sensors["down"]
 speed = move.dLoc[1]

Echa un vistazo a move = cont.actuators["move"]. Esto permite acceder al actuador llamado "movimiento " de la lista de los actuadores . Si no se define dentro de los corchetes (por ejemplo: cont.actuators [ ] ), entonces todos los actuadores conectados al controlador python podrían entrar en esta lista. Pero en este caso , sólo estamos llamando el uno llamado "movimiento " .

Ahora mira a las líneas para pressup y pressdown . Estos acceder a los sensores " arriba" y "abajo" para que podamos detectar que se pulsan las teclas y hacer que el script de hacer algo diferente para cada evento.


Ahora echa un vistazo a la última línea , speed = move.dLoc[1] . Aquí nos sumergimos en el actuador de movimiento. El actuador de movimiento es un actuador de movimiento y tiene diferentes campos podemos acceder y cambiar con el pitón . En este caso estamos accediendo el valor dLoc porque así es como nos estamos moviendo nuestro vehículo. Queremos pasar el vehículo sobre el eje Y por eso estoy llamando el segundo valor del campo dLoc . Si te estás preguntando por qué he escrito [ 1 ] para que el segundo valor en la lista , tome nota de que la lista de elementos empiezan desde 0 , así que llamar move.dLoc[1] se llama el segundo elemento de esa lista. Si quisiera obtener el primer valor , el valor de X, me gustaría escribir como move.dLoc[0]. Así que en resumen , con esta línea de código nuestra velocidad variable será ahora igual sea cual sea el valor de Y es en ese momento se ejecuta el script .

Hacer que las cosas sucedan 
Ahora que hemos declarado todas nuestras variables que vamos a añadir las declaraciones de un par para determinar si arriba o abajo se presiona, y luego tener dos teclas desencadenan diferentes cosas. En resumen, esto es lo que queremos que suceda. Cada vez que el jugador presiona arriba, se añade 0.05 para el valor Y en el accionador de movimiento, lo que aumenta la velocidad más con cada pulsación de tecla. Cada vez que el jugador presiona hacia abajo, el valor de Y se pone a 0, por lo que la parada del coche. 


Vamos a empezar por la definición de lo que sucede cuando presionamos arriba. Así que añadir en las líneas por debajo de la velocidad variable de forma que la secuencia de comandos es la siguiente: 


import bge
cont = bge.logic.getCurrentController()
own = cont.owner
move = cont.actuators["move"]
pressup = cont.sensors["up"]
pressdown = cont.sensors["down"]
speed = move.dLoc[1]
if pressup.positive:
    speed = speed + 0.05
    move.dLoc = [0.0, speed, 0.0]
    cont.activate(move)
Esta sentenciaif se utiliza para detectar si o no el botón de arriba se ha pulsado . Asegúrese de mantener las cosas formateado como he formateado ella. Su sentencia  if   necesita dos puntos al final de la misma , y cualquier parte de acción de esta declaración debe ser tabulada en debajo de ella. Ahora bien, si el jugador presiona arriba, se añade 0,05 a cualquiera que sea el valor de la velocidad actual , y este valor de velocidad se enchufa en el actuador de movimientomove actuator  dLoc es el campo en el accionador de movimiento que queremos cambiar . Si desea cambiar otros campos en el actuador, para averiguar lo que están disponibles que puede utilizar print dir(move)opciones. Así que ahora sólo tiene que conectar la variable de la speed  velocidad en que el valor de Y en la lista que hay y va a cambiar el valor en el actuador. Para hacer este actuador activa ahora , utilizamos el cont.activate(move) . Ahora el coche se mueve más rápido .Ahora vamos a definir lo que sucede cuando presionamos hacia abajo. Así que añadir en las líneas en la parte inferior para que su guión se ve así:

import bge
cont = bge.logic.getCurrentController()
own = cont.owner
move = cont.actuators["move"]
pressup = cont.sensors["up"]
pressdown = cont.sensors["down"]
speed = move.dLoc[1]
if pressup.positive:
    speed = speed + 0.05
    move.dLoc = [0.0, speed, 0.0]
    cont.activate(move)
elif pressdown.positive:
    speed = 0
    cont.deactivate(move)
    move.dLoc = [0.0, 0.0, 0.0]
El elif declaración es como decir "else if". Así que si el jugador está presionando hacia abajo en vez de hacia arriba, se establece el valor de la velocidad speed a 0, desactiva el actuador movimiento move que detiene el coche, y por último reiniciamos el valor de Y en el campo de dLoc de nuevo a 0.
Juega el juego! 
Su guión está completo! Comienza el juego! Ahora presione repetidamente para ganar velocidad, y pulse la tecla hacia abajo para detener. 
No hicimos uso de la realidad propia variable en este tutorial. Pero como un ejemplo rápido, si ha creado una propiedad para el objeto llamado "salud", que sería capaz de leer o cambiar este valor en Python llamando así: propia ["salud"]. 
Cómo depurar sus scripts 
Puede haber errores en la secuencia de comandos que evitan si se ejecute correctamente. Estos errores aparecen en la consola del sistema. Así que si vas a jugar a este juego y nada funciona, compruebe la consola del sistema para ver lo que podría ser el error. Incluso le decimos el número de línea del error encontrado. Con los números de línea habilitadas en el editor de texto que usted será capaz de encontrar el error sin ningún problema. 
Fuente:

2 comentarios:

  1. muy bueno espero aprender lo básico para emprenderme en el mundo del videojuego desde blender. Muchas gracias por la gran ayuda para comensar

    ResponderEliminar
  2. Gracias hace banda q estoy buscando hacer juegos con Python ya q es el lenguaje que me enseñan en 1ro de UNI

    ResponderEliminar