Para mi juego de plataformas quería usar image_xscale=-1 para hacer que el personaje mire para el otro lado ahorrando sprites, pero da erroes con las coordenadas es muy raro

Yo necesito que chequee colisiones en una posicion, exactamente es
x+sprite_width/2+velocidad*2

Para cuando mira para el otro lado cambié los + por -
x-sprite_width/2-velocidad*2

Pero chequea en posiciones equivocadas cuando uso image_xscale=-1, acá pueden ver una imagen, en donde dibujo un punto en x-sprite_width/2-(velocidad*2). Con el robot mirando hacia cada unos de los lados


Ahí se logran ver los dos puntitos, el que mira a la derecha dibuja en la posicion que quiero, el de la izquierda no.


Lo extraño es que si al image_xscale lo cambio en el evento draw, con un draw_sprite_ext funciona todo normalmente, pero yo no quiero hacer un eventro draw a todos los enemigos :-\
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


anda a la edicion del sprite y pone en el "centro" (center) del mismo el punto de rotacion.

Me había olvidado de aclarar eso, ya lo habia puesto en el centro, de ahí viene ese sprite_width/2
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


#3 Abril 11, 2012, 11:24:33 PM Ultima modificación: Abril 11, 2012, 11:26:35 PM por Wadk
¿En qué evento estás cambiando el image_xscale?
Vim.

En el step, para que no tengan que hacer preguntas dejo el editable :-[
EDIT: Aprieta espacio para ir a esa room
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


No vi el editable pero el error esta aca x-sprite_width/2-velocidad*2, ya que lo que haces es la siguiente relacion matematica. 0-spr/2=16-sp*2=0.  mejoralo asi.
var c;
c=(sprite_width/2+velocidad*2)
y las colisiones asi.
x+c
x-c
listo.

No cambia en nada :-\
Me parece que es lo mismo que habia puesto, pero funciona igual, o sea quedo:
Citarc=(sprite_width/2+velocidad*2)
draw_circle(x-c,y,2,0)

No entendí esto:
Cita de: elviskelley en Abril 12, 2012, 03:56:17 AM
lo que haces es la siguiente relacion matematica. 0-spr/2=16-sp*2=0.
Me parece que sería así:
Si x=0, sp=2
0-spr/2=-16
-16-2*2=20


Según se la multiplicación y división tienen más prioridad que suma y resta, por eso se hacen antes y no haría falta poner parentesis en ese codigo
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Amigo Mgbu:

  Me llevo tu editable para la casa, allá lo revisaré con calma.  :D

  Tengo una idea de por qué no se dibuja el círculo siempre igual. Digo eso es lo que quieres, ¿no?   :-[

  No diré nada aun hasta no estar seguro.  ;)

  Gracias por la atención prestada y disculpen las molestias causadas.  :D 


El problema no es donde se dibuja el punto, si no donde chequea las colisiones
Para representar donde chequea las colisiones dibujo un punto en el lugar, que como ven no esta bien

Ahí hice más representativa la imagen
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


#9 Abril 12, 2012, 11:10:51 PM Ultima modificación: Abril 12, 2012, 11:14:01 PM por Wadk
No vi el editable (no tengo windows) pero creo que el problema es que cuando xscale vale -1, el valor de sprite_width se invierte (repito, creo).
Intentá dibujar el punto (y verificar la colisión) en x-(sprite_width/2)*image_xscale-(velocidad*2).

Por cierto, cuando mencionás esto:
Cita de: Mgbu en Abril 10, 2012, 10:46:50 PM
Lo extraño es que si al image_xscale lo cambio en el evento draw, con un draw_sprite_ext funciona todo normalmente, pero yo no quiero hacer un eventro draw a todos los enemigos :-\
Al hacer esa prueba, ¿realmente cambiás el image_xscale o simplemente ponés -1 en el argumento xscale de draw_sprite_ext?
Vim.

Perfecto! tenías razón :D, ya estaba empezando a pensar que el error estaba en alguna otra cosa que había escrito XD

Moraleja: Cuando usás image_xscale=-1 el sprite_width de torna negativo

Cita de: Wadk en Abril 12, 2012, 11:10:51 PM
Por cierto, cuando mencionás esto:
Cita de: Mgbu en Abril 10, 2012, 10:46:50 PM
Lo extraño es que si al image_xscale lo cambio en el evento draw, con un draw_sprite_ext funciona todo normalmente, pero yo no quiero hacer un eventro draw a todos los enemigos :-\
Al hacer esa prueba, ¿realmente cambiás el image_xscale o simplemente ponés -1 en el argumento xscale de draw_sprite_ext?
Sí, solo ponía -1 en el argumento xscale :P

PD: Seguís programando en GM? veo que te fuiste para el lado del software libre :P (o tenes la suerte de tener una Mac)
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Me alegro de haber ayudado :).

Cita de: Mgbu en Abril 13, 2012, 01:33:45 AM
PD: Seguís programando en GM? veo que te fuiste para el lado del software libre :P (o tenes la suerte de tener una Mac)
No, hace mucho que no programo en GM. Dejé de usar Windows cuando probé Linux por el tema de la licencia y porque me gustó mucho más. Nunca probé Mac. Actualmente uso Arch.
Vim.