Hola gente, tengo un problema con un código que estoy haciendo. Primero les muestro el codigo:

Tengo un Joystick virtual que es como una palanca, con eso muevo libremente al personaje por la habitación.

El problema es que hay una room en la que necesito que el joystick virtual no esté pero si el personaje. Y ahí es donde se da el problema porque al no estar en la room el objeto joystick me da error, ya que en el evento steep del personaje hay parte del código del joystick y por ese motivo me da error al compilar.

Este es el código del evento steep del que tiene el personaje por si lo quieren ver.

direction = (direction+(sin(degtorad(obj_controller.dStick-image_angle))*12));
speed = obj_controller.lStick / 10; //velocidad de movimiento personaje

image_angle = direction;

x = max(0, min(x, room_width));
y = max(0, min(y, room_height));


Entonces se me ocurrió que capaz que con un condicional if se pueda anular el steep, como por ejemplo:

si objecto joystick existe
{
direction = (direction+(sin(degtorad(obj_controller.dStick-image_angle))*12));
speed = obj_controller.lStick / 10; //velocidad de movimiento personaje

image_angle = direction;

x = max(0, min(x, room_width));
y = max(0, min(y, room_height));
}

si nó
{
no hacer nada o anular steep
}

Como verán, hago lo que puedo con el condicional if, el tema es que no se que aplicar en el else, es decir, como anular el steep o todo el código en caso de que no exista en la room el objeto joystick.

¿Alguna ayuda?

¿No sabias que no tienes por que poner else? Pues poner solo el if. Si solo existe el if, en caso de no cumplirse no pasara absolutamente nada.

Cita de: Marth en Julio 22, 2014, 03:51:37 PM
¿No sabias que no tienes por que poner else? Pues poner solo el if. Si solo existe el if, en caso de no cumplirse no pasara absolutamente nada.

Lo hice sin else y me dio da error por eso pensé que había que poner un else: Lo tengo así:

if object_exists(obj_joystick)
{
direction = (direction+(sin(degtorad(obj_controller.dStick-image_angle))*12));
speed = obj_controller.lStick / 10; //velocidad de movimiento personaje

image_angle = direction;

x = max(0, min(x, room_width));
y = max(0, min(y, room_height));
}


Si el objeto obj_joystick existe hacer ese código. Pero salta el error lo mismo. ¿Será porque está en un step?

Cita de: matiascarpello en Julio 22, 2014, 03:46:12 PM
El problema es que hay una room en la que necesito que el joystick virtual no esté pero si el personaje.

Como verán, hago lo que puedo con el condicional if, el tema es que no se que aplicar en el else, es decir, como anular el steep o todo el código en caso de que no exista en la room el objeto joystick.

Estás planteando mal la solución. La solución no consiste en quitar el objeto joystick. El if tampoco se debería usar como has mostrado, preguntando si existe o no el objeto joystick.

Si quieres que en UNA habitación no se ejecute cierto bloque de código de STEP, el if debe preguntar si se está en una habitación distinta de ESA donde no quieres que se ejecute el bloque de código.

if (room != room_X)
{
     //código de joystick
}

Creo que sería bueno que indicaras qué mensaje de error recibes al compilar el programa, sería más fácil entender qué está pasando. Por otra parte, object_exists indica si un objeto existe en el juego y lo que tu debieras revisar es si una instancia de ese objeto existe en el juego, en otras palabras usar instance_exists(obj_joystick) en vez de object_exists(obj_joystick).

La solución de Penumbra también te serviría si es que hay sólo un room donde sabes de antemano que no está tu objeto joystick, pero si hay varias así, lo mejor es independizarte del room y hacer lo que planteas, es decir, omitir la revisión del joystick si su instancia asociada no existe.


   Saludos makero matiascarpello:


     La solución definitiva a ese problemas es que separes definitivamente las funciones de personaje de las funciones del joystick.  8)

¿Cómo? Muy sencillo...En vez de limitar al objeto personaje a ser controlado por un solo objeto, deja abierta esa posibilidad y limita al obj_controller a controlar un solo objeto...   8)

Por ejemplo:
En el objeto personaje, en vez de colocar este código:
direction = (direction+(sin(degtorad(obj_controller.dStick-image_angle))*12));
coloca en el objeto obj_controller este otro:
obj_personaje.direction = (obj_personaje.direction+(sin(degtorad(dStick-image_angle))*12));


De esta manera cuando el objeto personaje esté sin el objeto obj_controller no sentirá su falta y lo puedes controlar desde otro objeto. Cuando el obj_controller no esté puedes controlar el objeto personaje desde cualquier otro objeto sin tocar el código del objeto personaje. Simplemente cambiando los valores de las variables necesarias en el objeto personaje como son: direction, speed, image_angle, x, y, pero desde otros objetos como el objeto obj_controller.

¿Entendiste? Si necesitas una mejor explicación estaré por aquí...  XD
Espero te sirva de algo...  ;D
[/color]