Script de movimiento

Beral - 09/11/2011 02:22
Muy buenas a todos, este es mi primer mensaje, pero iré al grano obviando presentaciones. Lo que me trae de cabeza es el hecho de que estoy un poco verde con Python aplicado al ge de Blender. Ya que tampoco he encontrado información de gran utilidad, no sé si no habré buscado lo suficiente. Pero bueno en este caso lo que me gustaría saber si alguien me puede pasar algún ejemplo de una función en Python aplicada al BGE que haga mover un objeto (el código de dicha función). Con el código me vale, luego yo ya voy investigando, pero no sé por dónde empezar.

Otra cosa que me gustaría saber es si existen funciones en.py (supongo que, sí) para los logics bricks, es decir si alguien conoce o sabe de los códigos, del tipo radar, colisión, se podría hacer una función que consiguiese los mismo efectos, pero lo que digo es que, si existen el código preestablecido, o algún ejemplo o librería.

Creo que eso es todo, si alguien supiese de algún buen sitio donde informarse y ver totoriales y ejemplos me haría un gran favor pansándome la página. No sé si me podréis ayudar con todo o con algo, cualquier cosa que creáis que vale enviarmela, tampoco se si me he explicado lo suficientemente bien. Bueno yo seguiré buscando por mi cuenta y a ver si puedo sacar algo en claro. Gracias de antemano. Un saludo.
Soliman - 09/11/2011 08:01
Hola. Supongo que buscas la Api de Python para Blender. Si abres Blender, en la parte superior, hay un enlace en la parte de help.

Python Api reference.

Y te conecta directamente con la página, [url]http://www.blender.org/documentation/blender_python_api_2_60a_release/[/url].

En la que hay un apartado de.

Game engine modules.

Con su game logic, etc. [url]http://www.blender.org/documentation/blender_python_api_2_60a_release/bge, logic.html[/url].

Y en esta página, aunque algunos son de la versión anterior y no valen para 2.6 hay bastante información. [url]http://www.tutorialsforblender3d.com/[/url].

Espero que sea eso lo que buscas. Suerte.
Beral - 09/11/2011 23:18
Muchas gracias, si me ha servido bastante. Tendré que ir probando, pero al menos tengo algo por dónde empezar. Otra cosa, para implementar un script de Python a un objeto de Blender sabes/eis cómo hacerlo y donde? Un saludo.
Soliman - 10/11/2011 09:51
Si es para el Game Engine, desde el panel de logic. Sobre Python no tengo mucha cosa, pero estos minitutoriales creo que te pueden ayudar para la utilización del Blender game y el bloque de lógica (logic). [url]http://soliman25.pcweb.es/blendergame/inicio/inicio.htm[/url]. [url]http://soliman25.pcweb.es/blendergame/parte2/parte2.htm[/url]. [url]http://soliman25.pcweb.es/blendergame/bg4_disparo/disparo.htm[/url]. [url]http://soliman25.pcweb.es/runtime/runtime.htm[/url]. [url]http://soliman25.pcweb.es/camisetas/camisetas.htm[/url]. [url]http://soliman25.pcweb.es/blendergame/textobge/textobge.htm[/url]. [url]http://soliman25.pcweb.es/blendergame/bg5/bg05.htm[/url].

-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #153956

Beral - 10/11/2011 21:41
Muchas gracias, todo resuelto. Un saludo.
JEMV - 13/11/2011 23:04
Cuando estaba el Blender 2.48 hice un juego de fútbol que te puede ayudar. El lio fue pasarlo de Blender 2.48 a Blender 2.6 ya que todo fue cambiado.

Te aconsejo que empieces a programar en Python si quieres conocer el funcionamiento de las funciones, programación orientada a objetos y lo demás.

Hay te va.

-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #154163

Beral - 19/01/2012 21:23
Buenas otra vez, en este tiempo he estado intentando mejorar mis aptitudes y habilidades de programación orientada al BGE. Y me ha surgido el siguiente problema:
Tengo el siguiente código de módulo que viene por defecto en Bender:
[code]import BGE.

Def main():
Cont = BGE, logic, getcurrentcontroller().

Own = cont, Owner.

Sens = cont, sensors[mysensor].

Actu = cont, Actuators[myactuator].

If sens, positive:
Cont, activate (actu).

Else:
Cont, deactivate (actu).

Main()[/code]

Y la siguiente disposición de logics:

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #157259



Lo que me gustaría hacer es que cuando el sensor estuviese activado, al actuador se le modificase un parámetro de velocidad, pero no sé cómo. Gracias de antemano y un saludo.

-- IMÁGENES ADJUNTAS --

🖼️

Estamos trabajando para mostrar las imágenes del foro

Adjunto #157259

Mars Attacks - 22/01/2012 15:46
¿Qué quieres decir con que se le modificase un parámetro de velocidad? Tal y como lo tienes, lo que necesitas hacer es darle ese parámetro de velocidad al actuador en el logic brick. Lo que hará el script es activarlo cuando el sensor se dispare (y si no se dispara, no se activará).

Eso sí, el sensor que tienes es de tipo always, con lo que siempre (como su propio nombre indica) esta activado. ¿Qué quieres hacer exactamente?
Beral - 24/01/2012 03:16
Claro, pero lo que quiero hacer es poder aplicar ese parámetro desde el script, es decir no tener que modificar el logic de motion, si no que estando este a 0, al activarse el sensor, desde el propio script le de ese valor. Quier decir que ese valor o valores se puedan asignar al objeto en cuestión desde el mismo código, según el sensor que se active. No sé si me he explicado bien, un saludo.
Soliman - 24/01/2012 08:16
[url]http://www.tutorialsforblender3d.com/Python/python_index.html[/url]. En este enlace, hay uno que actúa activando y desactivando la rotación del objeto.

No es lo que buscas, pero te puede servir para ir conociendo Python.

Hay bastante información, aunque alguna ya se ha quedado antigua.

Y este enlace también te servirá. [url]http://blenderartists.org/forum/showthread.php?164765-scripting-examples-for-2.5-update-mar-26th-2010[/url].
Beral - 01/02/2012 19:18
[i]bueno, más o menos he conseguido que me funcione, aunque no como yo quería, pero algo es algo. Ahora el objeto al que le aplico el script, se mueve hasta el punto que tenga la propiedad de los radares, aunque he tenido que echar bastante mano de los logics, pero gracias. [/i].

A todo esto ahora me ha surgido otro problema, ya que mi siguiente objetivo es hacer que el personaje esquive objetos en su ruta hacia su destino. Lo que he hecho ha sido escribir más código para que detecte objetos y cambie la orientación hasta que la parte frontal del personaje no detecte obstáculo alguno y a este código he ligado el anterior del movimiento mediante sentencias if, para que si detecta algo el se anule (el de movimiento) y deje trabajar a la otra parte para que se esquive el obstáculo. Lo he puesto todo en el mismo archivo. El resultado es que, el personaje se mueve hacia su destino y cuando detecta un objeto delante se para y gira, el problema viene que cuando acaba de girar y tiene vía libre para seguir avanzando (aquí tendría que volver a ejecutar la parte del código de movimiento) se queda parado, y creo que esto es porque solo le una vez el script y la solución en cuyo caso sería que se reiniciase el código dentro del ge lo que pasa es que no sé cómo. Otra posible solución sería combinar las sentencias if con un bucle, pero me gustaría saber si hay alguna solución menos engorrosa. No sé si me he explicado bien. A todo esto estoy usando como controlador Python>>module, no sé si tiene algo que ver, pero por si acaso. Un saludo.