hola de nuevo hace poco comence a crear un juego de tetris pero hay una cosa que no me sale me gustaria que al completar una linea se destruyese

PD: si necesitan alguna información mas me avisan

#1 Mayo 18, 2012, 09:41:59 PM Ultima modificación: Mayo 18, 2012, 09:43:32 PM por Mgbu
Con
[gml]
with obj_bloque
    {
    if y=500 instance_destroy() //cambiar 500 por la "y" de la linea a borrar
    }
[/gml]
Eso destruye la al linea con "y" en 500, pero se pueden destruir cualquiera, así que yo chequearía con varios collision_point
[gml]
if collision_point(columna1_x+2,fila1_y+2,obj_bloque,1,1) //columna1_x es el "x" de la columna 1, entonces se reemplaza
and collision_point(columna2_x+2,fila1_y+2,obj_bloque,1,1)//fila1_y es lo mismo pero con la "y" de la fila
and collision_point(columna3_x+2,fila1_y+2,obj_bloque,1,1)//al +2 lo agregué por las dudas que chequee bloques adyacentes, no creo que pase pero por las dudas...
and collision_point(columna4_x+2,fila1_y+2,obj_bloque,1,1)
//hasta terminar columnas...
with obj_bloque
    {
    if y=fila1_y instance_destroy()
    }
//y hacer así con las demás filas[/gml]

A lo mejor alguien sabe un método mejor, pero es lo único que se me ocurre

EDIT:Ahora se me ocurre simplificarlo con un ciclo for, pero sería más complicado de entender
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


Cita de: Mgbu en Mayo 18, 2012, 09:41:59 PM
Con
[gml]
with obj_bloque
    {
    if y=500 instance_destroy() //cambiar 500 por la "y" de la linea a borrar
    }
[/gml]
Eso destruye la al linea con "y" en 500, pero se pueden destruir cualquiera, así que yo chequearía con varios collision_point
[gml]
if collision_point(columna1_x+2,fila1_y+2,obj_bloque,1,1) //columna1_x es el "x" de la columna 1, entonces se reemplaza
and collision_point(columna2_x+2,fila1_y+2,obj_bloque,1,1)//fila1_y es lo mismo pero con la "y" de la fila
and collision_point(columna3_x+2,fila1_y+2,obj_bloque,1,1)//al +2 lo agregué por las dudas que chequee bloques adyacentes, no creo que pase pero por las dudas...
and collision_point(columna4_x+2,fila1_y+2,obj_bloque,1,1)
//hasta terminar columnas...
with obj_bloque
    {
    if y=fila1_y instance_destroy()
    }
//y hacer así con las demás filas[/gml]

A lo mejor alguien sabe un método mejor, pero es lo único que se me ocurre

EDIT:Ahora se me ocurre simplificarlo con un ciclo for, pero sería más complicado de entender
donde aplico tus script en el juego te dejo el editable por que ami no me funciono bien a lo mejor hice algo mal

Eso va,en el step de un objeto controlador, es decir cualquier objeto mientras que no sea borrado, por eso no puede ir en el obj_bloque por ejemplo
Ahora no estoy en casa, esta noche o mañana veo el ejecutable
(Ojala mi android tuviera game maker XD)
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


Acabo de abrir tu juego, lo que tendrías que hacer primero es hacer que el juego trabaje por cuadros, si te fijas los bloques pueden estar un poquito corridos, algo que no pasa en el tetris, además los bloques deben frenarse al chocar con otro bloque y esas cosas
Si necesitas ayuda en eso abre otro tema, pero no quiero arriesgarme de hace el sistema de borrado de filas porque se necesitan otras cosas primero, entendes? ;)

Te digo que tenés que hacer primero :):
- Que los bloques se frenen al chocar entre ellos
- Que el juego trabaje con una grilla
- Que se roten las figuras
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


Cita de: Mgbu en Mayo 19, 2012, 10:55:14 PM
Acabo de abrir tu juego, lo que tendrías que hacer primero es hacer que el juego trabaje por cuadros, si te fijas los bloques pueden estar un poquito corridos, algo que no pasa en el tetris, además los bloques deben frenarse al chocar con otro bloque y esas cosas
Si necesitas ayuda en eso abre otro tema, pero no quiero arriesgarme de hace el sistema de borrado de filas porque se necesitan otras cosas primero, entendes? ;)

Te digo que tenés que hacer primero :):
- Que los bloques se frenen al chocar entre ellos
- Que el juego trabaje con una grilla
- Que se roten las figuras
se hacer todo lo que (menos poner grilla) dices pero quería comenzar por el mas difícil y por cierto como hago para poner grilla es que nunca he hecho un juego con grilla

Es simple, lo que tenés que intentar hacer es por lo menos una grilla horizontal, para que te muevas hacia los costados de a un bloque por vez, como se ve en la imagen adjunta, primero elejís el ancho de la cuadricula, en tu juego es de 32px
Lo unico que hice fue cambiar la variable myspeed en los dos bloques a 32, porque antes estaba en 20 :)

Ahora viene algo difícil: cuando el objeto cae hasta el fondo se tendría que separar en los 4 bloques que lo componen, para que se entienda hice otra imagen
Eso es más difícil :-[
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


Cita de: Mgbu en Mayo 20, 2012, 05:25:31 PM
Es simple, lo que tenés que intentar hacer es por lo menos una grilla horizontal, para que te muevas hacia los costados de a un bloque por vez, como se ve en la imagen adjunta, primero elejís el ancho de la cuadricula, en tu juego es de 32px
Lo unico que hice fue cambiar la variable myspeed en los dos bloques a 32, porque antes estaba en 20 :)

Ahora viene algo difícil: cuando el objeto cae hasta el fondo se tendría que separar en los 4 bloques que lo componen, para que se entienda hice otra imagen
Eso es más difícil :-[
creo que con un ejemplo de grilla podria acabar de hacer el juego sabes donde puedo encontrar un ejemplo.gmk de grilla?

Se supone que lo tenes que hacer vos, es parte de la diversion :P. Que no te sale?


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


Cita de: Mgbu en Mayo 21, 2012, 12:03:22 PM
Se supone que lo tenes que hacer vos, es parte de la diversion :P. Que no te sale?
tendre que empecer de zero

No!, podés seguir desde donde estás, lo que tenés que hacer es crear 4 bloques en tales posiciones al chocar la linea roja
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


Cita de: Mgbu en Mayo 21, 2012, 05:37:40 PM
No!, podés seguir desde donde estás, lo que tenés que hacer es crear 4 bloques en tales posiciones al chocar la linea roja
dime todos los requerimientos que tengo que hacer

Hola, lo que sucede es que comienzas con un problema de diseño del juego.
Partamos de que diseñaste la ficha  que cae como en dibujo 1, el terreno(cuadricula o grilla) por la que se va mover debería ser de 32 px (pixeles), porque? es la medida del lado de la ficha con menor tamaño.

Primer error: la room tiene un SnapX y SnapY de 16px , que va suceder, si colocas la ficha en un múltiplo de 16 en la Room Properties (tu la colocaste en 240,del finaltetris.gmk y no es multiplo) te va a sobrar un espacio en la parte inferior izquierda o derecha que no va a poder ocuparse (dibujo 2)
Segundo error: el movimiento de la ficha es de 20px, porque? la ficha siempre va a ocupar un lugar de la horizontal igual a un múltiplo de 20 (20, 40, 60, etc), y si la ficha tiene en su lado menor 32px o multiplo (32,64 o 96) y el terreno una cuadricula de 32px, los lados de las fichas nunca van a poder coincidir.

También te tienes que fijar en el tamaño del terreno, para que las fichas coincidan y no queden cortadas o te sobre espacio, en este caso no habria problema porque las medidas predeterminadas del room son multiplo de la medidas de la ficha.

En resumen: es un juego como algún otro, hay que tener un poco de noción de matemáticas para elegir los valores correctos con la cual vas a diseñar tu juego. Principalmente lo que hay que fijarse es que los valores del movimiento y tamaño de los lados de la ficha sean múltiplos entre ellos.Busca el proyecto "Lazarus" en internet, te va a ayudar bastante, esta en ingles

 Uy perdon por desaparecer  :-[
Se me paso por alto el mensaje
Lo que te falta es rotar el ladrillo (por ahora en L) sin cambiar de objeto
También hacer que ese ladrillo este dividido en bloqueciutos por lo menos despues de caer
Luego lo otro que queda es ajustar las variables como ya dijieron
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