Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - :StonerStanley:

1
Supongo que te referiras un juego tipo Spore?
2
Cita de: Bangaran en Septiembre 15, 2019, 06:21:47 AM
Entiendo lo q dices amigo!! Pero me dice q lo coloque en el step pero es cuando de los códigos lo coloco ??
En el que hace el movimiento aleatorio?

Colócalo en cualquiera, el evento "step", "begin step" y "end step" sirve para que se ejecute el código cada frame, dando igual en que posición del evento esté.
3
Cita de: Bangaran en Septiembre 13, 2019, 07:38:59 PM
hola disculpa por mi novatada pero eso codigo q me dices es para colocarlo en el objeto enemigo o jugador?? y si es en el enemigo y tengo una maquina de estados!! en cual de los codigos me recomiendas que lo coloque


Estoy seguro que es para el enemigo ya que usa la función "mp_potential_step();" que hace que la instancia u objeto que la ejecute intente alcanzar desde una posición inicial (la posición del enemigo) a la posición del posición final (la posición del enemigo) evitando sólidos con una velocidad establecida. La función es algo ineficiente para rooms muy "laberínticas" y estrechas, pero puede servir para rooms abiertas.

Si tienes una sistema de estados, no habrá ningún problema, pero eso sí, desactiva el anterior estado y vuelvelo a activa cuando sea necesario desactivarla.
4
Preguntas y respuestas / Re:Optimización del dibujado en 3D
Septiembre 03, 2019, 06:29:08 PM
Cita de: Jucarave en Septiembre 03, 2019, 05:55:51 PM
Me refiero al orden de dibujo, como te decía lo mas costoso es enviar cosas a la GPU, por eso debes minimizar ese número de llamados lo más que puedas... En general hablando de GMS no hay mucho que puedas hacer en ese sentido pero igual debes tratar de agrupar los objetos antes de dibujarlo de la siguiente forma:

Para todos los objetos opacos:

* textura -> modelo -> otras propiedades

Luego de dibujar todos los objetos opacos dibujas los objetos semitransparentes agrupándolos así:

* profundidad -> textura -> modelo -> otras propiedades

Eso quiere decir, que si tienes la siguiente lista de objetos:


1. ModeloA -> TexturaA
2. ModeloB -> TexturaA
3. ModeloB -> TexturaB
4. ModeloA -> TexturaA
5. ModeloA -> TexturaA
6. ModeloA -> TexturaA
7. ModeloA -> TexturaB
8. ModeloC -> TexturaA


En vez de dibujarlos en el orden en el que los creaste, deberías agruparlos y ordenarlos para que al momento de dibujarlos queden así:


1. ModeloA -> TexturaA
4. ModeloA -> TexturaA
5. ModeloA -> TexturaA
6. ModeloA -> TexturaA
2. ModeloB -> TexturaA
8. ModeloC -> TexturaA
7. ModeloA -> TexturaB
3. ModeloB -> TexturaB


Como puedes ver ahí: primero dibujamos todos los modelosA que tengan texturaA luego dibujamos todos los modelosB con texturaA y los modelosC con texturaA... luego pasamos a la texturaB y dibujamos todos los modelosA con texturaB luegos los modelosB, etc...

Con esto lo que logramos es: mandar a la GPU la texturaA, luego mandar a la GPU el modeloA, cuando ya no necesitemos el modeloA pero si la texturaA entonces enviamos el modeloB pero conservamos la texturaA hasta que ya no necesitemos el modeloB y luego hasta que no necesitemos la texturaA en ese caso enviamos la texturaB y de ese modo solo enviamos cosas a la GPU cuando necesitemos hacerlo.

No se si me expliqué bien.

Saludos

Vale ahora si ya lo entiendo :), todo depende del orden del modelo y textura.
5
Preguntas y respuestas / Re:Optimización del dibujado en 3D
Septiembre 03, 2019, 05:35:41 PM
Cita de: Jucarave en Septiembre 03, 2019, 04:57:05 PM
Hay varias razones por las cuales te estan bajando los FPS.

Cuando usas d3d_draw_block, en cada frame estas creando un modelo para cada cubo y luego dibujándolo, eso toma mucho tiempo no solo en crearlo sino en enviarlo a la GPU (Que es un proceso bastante lento), lo que tienes que hacer es crear en el evento create el modelo de los cubos (o de un solo cubo si es que lo estas dibujando muchas veces) y luego dibujarlo con d3d_model_draw

Ahora, no es solo eso, en general cada vez que haces un cambio de alguna información a la GPU es un proceso que se toma bastante tiempo, por ejemplo si tienes 100 cubos diferentes con 100 texturas diferentes entonces por cada cubo que trates de dibujar tienes que enviar nueva información a la GPU no solo para el modelo (vertices, coordenadas de texturas, normales, etc) sino también para la textura de cada uno de esos objetos.

Para trabajar con esto puedes hacer:

* Usar un atlas de texturas: En vez de tener una imagen por cada edifico por ejemplo, ten una imagen que contenga todas las texturas de todos los edificios, así estos pueden compartir esa textura y no necesitas reenviar esa data a la GPU (esto lo debes hacer manualmente igualmente) pero para que esto funcione todos los edificios tienen que dibujarse continuamente, es decir: si tienes 2 edificios y una esfera entonces es mas optimo dibujarlos así: edificio->edificio->esfera, ya que si los dibujas así: edificio->esfera->edificio entonces entras en el mismo problema de volver a mandar la data de las texturas multiples veces.

Por otro lado, es mucho más optimo tener todos los edificios en un solo modelo y enviarlo así sea que se dibujen todos en cada frame, que tener cada edificio individualmente.. por la misma razón, cuando los tienes todos en un solo modelo, solo necesitas enviar esa data a la GPU una vez por frame, incluso si estas dibujando 100 edificios.

Por ejemplo, en este pequeño ejemplo que hice, todo el nivel se dibuja en un solo objeto, a pesar de que el suelo y los muros tienen texturas diferentes:



Ahí te copié unos pensamientos de modo desordenado, la verdad es que esto es un tema bastante complejo y deberías dedicarle un tiempo a aprender como funciona el rendering pipeline en openGL para que entiendas cuales son los mejores procedimientos.

Saludos

Entiendo gran parte de tu comentario, pero hay una pequeña parte que no. La del atlas de textura. Entiendo lo de usar una textura global en vez de diferentes, pero no lo del orden, ¿te refieres a su orden de dibujado o al 'depth' de la instancia?

Otra cosa, ¿lo que hace consumir la CPU es enviar a la GPU la información del dibujado?

Y por último, gracias.
6
Preguntas y respuestas / Optimización del dibujado en 3D
Septiembre 01, 2019, 09:53:25 PM
Buenas. Resulta que tengo una 'room' en la que tengo una gran cantidad de instancias que dibujan en 3D. Mi problema es que estas instancias dibujan una figura (un cubo, con la función 'd3d_draw_block()'), resulta de hacen bajar bastante los fps (45-55 / +60), y además de que si desactivo su dibujado, los fps aumentan bastante (80 - 120 / +60).

¿Alguno sabe como se podría optimizar el dibujado del 3D, o si acaso, una alternativa?

Gracias
7
Preguntas y respuestas / Re:Juego de lucha
Agosto 30, 2019, 08:26:05 PM
Nunca lo he probado, pero podrías dibujar el sprite 2 veces (una el jugador, y otra la sombra) y editar su escala. Para editar su escala podrías usar la función draw_sprite_ext, que te permite editar la escala, e incluso su rotación.



Y en cuanto a shaders, ojalá supiera programar con shaders :'(
8
Cita de: Black_Cat en Agosto 30, 2019, 05:09:01 PM
Se puede, conceptualmente una array bidimensional es un array dentro de otro. Una tabla , que es lo mismo, es una lista de listas.
Siguiendo el concepto, un array3D sería una grilla de listas. Entonces:
[gml]
lis1 = ds_list_create(); // primera dim
lis2 = ds_list_create(); // segunda dim
lis3 = ds_list_create(); //tercera dim

ds_list_add(lis3, "3D"); // en lis3[0] hay un valor
ds_list_add(lis2, lis3); //en lis2[0] hay otra lista
ds_list_add(lis1, lis2); //en lis1[0] hay una lista


lista2 = ds_list_find_value(lis1, 0) //recuperamos la lista2
lista3 = ds_list_find_value(lis2, 0)
elemento = ds_list_find_value(lista3, 0);

show_message_debug(string(elemento));
[/gml]

No se bien como estes implementando el juego pero creo que te conviene usar una grilla de Nx4 donde cada lugar guardaria coordenada x,y,z y el valor true/false.

No probé hacer una ds_grid con una lista dentro para evitar hacer la lista de lista. Pero en teoría deberia funcionar joya

Entiendo lo que me intentas explicar (básicamente como una especie de array al cubo), sin embargo, no entiendo la función final del código que has escrito.

Cita de: dixon en Agosto 30, 2019, 06:12:38 PM
Hola,

Solicitando permiso de  Black_Cat para sugerir otro método, indico:



[CREATE EVENT]

texto=""

colision[4,2]=1
colision[9,3]=1
colision[8,3]=1
colision[room_width,room_height]=0




[DRAW EVENT]

///POSICIÓN DEL OBJETO QUE COLISIONARÁ CON EL CUBO IMAGINARIO
xpos=3
ypos=3
zpos=5

///EVALUADOR DE COLISIÓN
if(colision[xpos*ypos,zpos]){texto="Ha colisionado"}else{texto="no ha colisionado"}

//SALIDA TEXTUAL DE LA COLISIÓN
draw_text(10,10,texto)


En la imágen se vé un cubo ubicado en una posición predeterminada. En el código de [CREATE EVENT] se puede observar un array llamado colisión que indica los puntos de colisión donde el primer argumento es la multiplicación de la posición X por la posición Y de un punto específico del cubo y el segundo argumento representa la posición z. Para evaluar este código modifique los valores del objeto que colisionará con el cubo imaginario y compare con la imagen.

No entiendo muy bien lo que intentas explicar.
9
Muy buenas. Estaba ideando un manera de realizar colisiones tridimensionales a través de una variable con un array tridimensional. Esta variable puede ser 'true' o 'false' según las coordenadas x, y, z. El problema que se me plantea es que en Game Maker no se pueden crear arrays tridimensionales, solo unidimensionales y bidimensionales. ¿Hay alguna solución para este problema?

Gracias.

Edit:

Tras intentar implementar este sistema, me he dado cuenta de que resulta más eficiente crear un ds_grid. Sin embargo, la pregunta sigue: ¿que alternativa habría para implementar un ds_grid tridimensional?
10
Juegos en desarrollo / Re:Crawler
Abril 21, 2019, 08:59:51 AM
Cita de: getnoff en Abril 21, 2019, 06:44:46 AM
Se ve bien para empezar con el mundo de juegos 3D, sigue así.

Pero que tal lo ves respecto a los demás sin tener en cuenta mi nivel en cuanto a este tipo de juegos? no se si me explico bien :-[
11
Juegos en desarrollo / Crawler
Abril 20, 2019, 11:33:27 PM

Crawler





Otro


GM: Studio



Sobrevive el máximo tiempo que puedas en una mazmorra aleatoria.
Evita el ataque de tus enemigos y acaba con ellos.


Imágenes en adjuntos ( ??? ) .




Link en adjuntos.



-------------------------------------------------------------------------------------------
Última versión: Crawler_sV0.11.     
                                       
Incluye un nuevo enemigo y un escudo que defiende       
ante ataques con bolas de fuego. En la siguiente               
versión añadiré pisos (estoy un poco trabado en la           
optimización, pero creo que pronto lo tendré),
nuevos enemigos, nuevas armas y (quizás)
pociones.
-------------------------------------------------------------------------------------------

Por ahora el juego es simple, pero añadiré más cosas en él con el tiempo. Ahora mismo el juego cuenta con generador de mazmorras el cual genera enemigos.

Tengo pensado añadir las siquientes cosas:

-Pisos.
-Más armas.
-Ítems.
-Más enemigos.
-Habitaciones.
-Cofres.
12
Preguntas y respuestas / Re:Desactivar colisiones
Abril 14, 2019, 07:18:12 PM
Podrías hacer que el jugador tenga una variable (ej. dañado = ...) y cuando el jugador sea atacado, este tenga la variable dañado en verdadero; si dañado es verdadero, entonces se activa una alarma que cuando termine, hace que la variable dañado sea como es al principio. Creo que te lo explicare mejor así:

En evento 'Create':

dañado = false;


En evento 'Step':

if place_meeting(x, y, [enemigo]) and dañado = false {
dañado = true;
// Si quieres, puedes añadir más acciones, como daño y esas cosas.
}
if dañado = true {
if alarm[0] < 0 {
alarm[0] = [tiempo en frames que desees];
}
}


En evento 'Alarm[0]':

dañado = false;


Y ya esta.
13
Cita de: Clamud en Abril 13, 2019, 04:50:02 PM
El problema en el script es el return. La estructura with es un ciclo que recorre las instancias una a una, cuando utilizas return se termina el ciclo y devulve el id de una sola instancia.

Podrías cambiar el script de esta forma
[gml]
with (argument2) {
   if argument0 > z1 and argument1 < z2 {
      solid = true;
   }
   else {
      solid = false;
   }
}
[/gml]

incluso se puede hacer más simple
[gml]
with (argument2)
solid = (argument0 > z1 and argument1 < z2);
[/gml]

En la función mp_step_potential, el último argumento solo debe ser true o false. Para evadir sólidos utiliza false.
[gml]
mp_potential_step_object(jugador_obj.x, jugador_obj.y, velocidad, false);
[/gml]

¿Y no se podría hacer de otra manera que no use sólidos? Quiero decir, que pueda haber varias instancias así (es para los enemigos en un juego 3D), ya que lo más probable de esta manera es que al ser 3D el juego, haya una mezcla de colisiones.
14
Cita de: NiuWeb en Abril 13, 2019, 12:18:04 AM
[gml]
with objeto {
    if variable == 2 {
        //aquí haces cualquier cosa con todas las instancias de 'objeto' en las que la variable 'variable' valga 2.
    }
}
[/gml]
PD: Debes colocar en el post el ícono de la versión de GM que estás utilizando.

Sí, pero la idea es declararlos como si fueran una variable en conjunto, como por ejemplo: '[función](arg1, arg2, variable)'
No sé si se ha entendido bien, pero por lo menos gracias por responder.

----------------------------------------------

Vale, he intentado esto, pero el problema es que solo llega a ser capaz de referirse una instancia:

Primero, he hecho un script llamado 'establecer_solidos_enem(altura1, altura2, objeto a referirse,)':

zz1 = argument0;
zz2 = argument1;
obj = argument2;

with (obj) {
    if other.zz1 > z1 and
       other.zz2 < z2 {
            return id;
       }
}


Luego, en el evento 'step' del objeto que desea obtener ese conjunto de variable:

mp_potential_step_object(jugador_obj.x, jugador_obj.y, velocidad, establecer_solidos_enem(z1, z2, bloque))
15
Como dice el título, la pregunta es como referirse a un grupo de instancias(de un objeto) que toman un determinado rango o numero en una determinada variable.
Gracias.