Resultados 1 al 5 de 5

Game engine python y mensajes osc

  1. #1
    Fecha de ingreso
    Jul 2007
    Mensajes
    176

    Blender Game engine python y mensajes osc

    Hola de nuevo. Traigo algún pseudoproblema nuevo con el Game Engine y Python. Os cuento: Basándome en unos archivos que he descargado de aquí, que sirven para interconectar Blender y touchosc, una aplicación para el móvil, estoy usándolo para mandar mensajes osc desde Blender a Grasshopper.

    Básicamente de todo lo que ahí viene estoy usando un archivo de configuración donde especifico puertos y direcciones IP de emisor y receptor, un archivo osc demasiado complejo como para que yo lo entienda o sepa meterle mano y que no sé cómo (ni si se puede) meter dentro del.blend, y por último, para cada objeto que necesito que mande un mensaje, tengo que crear otro script tal que así:
    Código:
    import Gamelogic as gl.
    
    From osc import osclient, oscmessage.
    # get controller and Owner.
    
    Controller = gl, getcurrentcontroller().
    
    Owner = controller, Owner.
    
    Client = osclient().
    
    Msg = oscmessage ().
    # gl, client is a tuple in GL with IP and port.
    
    Msg, setaddress(/1/toggle1).
    
    Msg, append(Owner[text]).
    
    Client, sendto (msg, gl, client)
    El problema es que, si tengo diez objetos que quieran mandar mensajes, o un mismo objeto que quiera mandar varios mensajes diferentes (propiedades), tengo que crear un archivo diferente con esa configuración para cada uno de los mensajes que quiera mandar.

    Si quiero mandar dos propiedades de un mismo objeto y pongo algo así.
    Código:
    [.].
    
    Msg, setaddress(/1/fader4).
    
    Msg, append(Owner[text]).
    
    Client, sendto (msg, gl, client).
    
    Msg, setaddress(/1/toggle1).
    
    Msg, append(Owner[text2]).
    
    Client, sendto (msg, gl, client)
    No funciona. Tengo que crear dos archivos diferentes, uno para cada propiedad, aplicados ambos a ese objeto. Si son objetos diferentes, cada objeto debe tener su script adjunto.

    Por lo tanto mi pregunta es: ¿cómo podría hacerlo usando sólo un archivo? Un script que lo asigne con un always a un empty, por ejemplo, y que vaya listando: mandar propiedad text del objeto1 como /1/fader1, text del objeto2 como /1/fader2, text del objeto3 como /1/fader3, etc.

    Supongo que habrá que importar la lista de objetos dentro del script y luego cambiar el Owner del script por el objeto en cuestión, pero no sé muy bien cómo hacerlo, así que, os pregunto.

    Vaya, y otra cosa, en vez de mandar propiedades de juego del objeto, ¿sería posible mandar otras cosas, como la posición, por ejemplo? Gracias de antemano.
    Última edición por Azrael^^; 11-12-2012 a las 21:12

  2. #2
    Fecha de ingreso
    Apr 2002
    Mensajes
    14,668

    Game engine python y mensajes osc

    http://www.local-gurú.net/blog/2009/...-as-osc-client. Tal vez echando mano de Google puedas encontrar alguna cosa. Lo que en visto en alguna ocasión (y yo mismo he intentando) es gente que usa puredata para aglutinar y organizar las órdenes.

    Sé que no te resuelvo el problema, pero igual no conocías estas cosas.

  3. #3
    Fecha de ingreso
    Jul 2011
    Mensajes
    20

    Game engine python y mensajes osc

    Parte por parte. Para declarar un objeto veo que usas:
    controller = gl, getcurrentcontroller(). Owner = controller, Owner.
    .

    Prueva con usar esto:
    scene = gl, getcurrentscene ().

    Objeto = scene, objects[nombre_del_objeto"].

    Objeto2 = scene, objects[nombre_del_objeto"]
    .

    Bien. Ahora lo de enviar varios mensajes, tu usas:
    msg, setaddress(/1/fader4).

    Msg, append(Owner[text]).

    Client, sendto (msg, gl, client).

    Msg, setaddress(/1/toggle1).

    Msg, append(Owner[text2]).

    Client, sendto (msg, gl, client)
    .

    Prueva a usar:
    msg, setadress(/1/fader4).

    Msg, append(objeto[text"]).

    Msg, append(objeto[text2"]).

    Client, sendto (msg, gl, client)
    .

    Bueno, esto segundo no estoy seguro que funcione, nuna he usado osc. Saludos.

  4. #4
    Fecha de ingreso
    Jul 2007
    Mensajes
    176

    Game engine python y mensajes osc

    Perfecto. Muchas gracias. Tan sencillo como eso. (esto es lo que tiene no haberme sentado aún a aprender Python decentemente).

    Revisando el archivo osc.py, imprescindible para todo esto, he terminado de construir como sería el script. Hay dos posibilidades:
    Código:
    msg, setaddress(/1/fader4).
    
    Msg, append(objeto[text]).
    
    Client, sendto (msg, gl, client).
    
    Msg, cleardata ().
    
    Msg, setaddress(/1/toggle1).
    
    Msg, append(objeto2[text2]).
    
    Client, sendto (msg, gl, client)
    Código:
    msg, setaddress(/1/fader4).
    
    Msg, append(objeto[text]).
    
    Client, sendto (msg, gl, client).
    
    Msg, clear(address=/1/toggle1).
    
    Msg, append(objeto2[text2]).
    
    Client, sendto (msg, gl, client)
    Cualquiera de las dos funciona bien.

    Una vez conseguido esto, ¿crees que sería posible mandar otro tipo de información del objeto como, por ejemplo, su localización?

  5. #5
    Fecha de ingreso
    Jul 2011
    Mensajes
    20

    Game engine python y mensajes osc

    Lo de enviar otro tipo de datos es perfectamente posible y muy fácil. Tu en msg, append(dato) substituyes dato por lo que quieras. Cuidado al mandar variables que no sean string, puede que osc lo soporte, o puede que no. Para ello es mejor que conviertas las variables a string (texto) con str(dato), y al recibirlas las vuelves a convertir con, por ejemplo, int(dato).

    Para posicionar objetos en BGE usa: objeto, localposition = [x y, z]. Si solo quieres variar la posición de un eje usa objeto, localposition, y = valor. Si usas físicas no muevas los objetos con este método, pues no se llevan bien (para así decirlo) con las físicas. Para ello puedes usar applyforce () y demás. Aquí te dejo una lista completa de las funciones de BGE http://www.blender.org/documentation...ge, types.html, mírate las del apartado kx_gameobject.

    Bueno con esto supongo que, ya podrás enviar lo que quieras, para enviar la posición, por ejemplo, seria: msg, append(objeto, localposition), si quieres codificarlo (puede que sea necesario, o puede que no, todo depende de osc) seria msg, append(str(objeto, localposition.x) +, + str(objeto, localposition, y) +, + str(objeto, localposition, z)).

    Luego para quitar las, y ponerlo todo en una lista podrías usar myposition = datosrecibidos, Split(,) y luego para acceder a x: x = myposition[0].

    Bueno, creo que me he pasado un poco con la información, pero seguro que te será útil, saludos. Si necesitas que te ayude en algo mándame un mensaje privado.
    plus: objeto, position, objeto, localposition y objeto, globalposition son lo mismo a efectos prácticos, yo por lo menos no les he encontrado ninguna diferencia, todos son globales..

Temas similares

  1. Por qué los game engines no apuestan por python?
    Por Spectrex en el foro Noticias 3D
    Respuestas: 6
    : 27-08-2017, 12:44
  2. Blender Blender python carro game
    Por zanvapalo en el foro Blender
    Respuestas: 7
    : 30-12-2014, 14:47
  3. 3ds Max Game engine tipo Cryengine UDK Unreal engine
    Por nicknick en el foro Videojuegos
    Respuestas: 4
    : 05-04-2013, 13:00
  4. 3ds Max Game engine
    Por Metalyang en el foro Videojuegos
    Respuestas: 1
    : 27-05-2011, 14:14
  5. Blender Game engine texto en el game engine tutorial
    Por 3dpoder en el foro Blender
    Respuestas: 1
    : 11-01-2009, 17:38