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.

Temas - DarkKRuleR

61
Buenas! Pues estoy haciendo un juego en equipo, de entrada no me planteaba hacerlo full 3D, pero he estado pensando que si pongo mucho trabajo en hacer modelos 3D ahorraré mucho al final... ejemplo:



Eso me ha enamorado. Modelos 3D sencillos, con pocos triángulos... algo así. El problema es, cómo hago en game maker para que no se vean los triángulos? Que se vea todo uniforme... o solo con poner las normales basta? o hay algún truco? Por ejemplo, fijáos en su pierna, se ve claramente que está separada en polígonos, pues evitar que pase eso en todo el cuerpo. A demás, en la imagen, los bordes y TODO en general se ve perfectamente uniforme, redondeado... cuando en realidad debe ser LOW POLY, por qué no se ve todo triangulizado, bordes en línea recta, etc?

A demás, qué programa me recomendáis para hacer modelos como los de la imagen, que luego pueda meter en GM y, digamos... rellenar sus coordenadas de textura. He estado tocando el Model Creator, hecho con GM para hacer modelos para GM, que incluso te exporta el código, pero no sé si es lo mejor.
62
Buenash, pues no sé qué ocurre... tengo este code

d3d_end(); d3d_set_lighting(false);
   
    scrIniciaCambioTextura();
    draw_sprite(sprEliMano, 1, 64, 64);
    draw_sprite(sprEliPluma, 0, 64, 64);
    textura1 = scrAsignaCambioTextura();

......................................
   
    scrIniciaCambioTextura();
    draw_sprite(sprEliMano, 3, 64, 64);
    draw_sprite(sprEliPluma, 1, 64, 64);
    textura8 = scrAsignaCambioTextura();
   
    d3d_start(); d3d_set_lighting(true);


Los puntos suspensivos significa que hay muchos más "fragmentos" como los dos que véis (llamada a scrInicia, dos draw sprite y scrAsigna), hago muchos en orden, os pongo sólo el primero y el último. Ahora las funciones

if (!surface_exists(surface128)) surface128 = surface_create(128, 128);
    surface_set_target(surface128);
    draw_clear_alpha(c_white, 0);


surface_reset_target();
return surface_get_texture(surface128);


Como véis, tras desactivar el 3D y la iluminación, me dispongo a MODIFICAR varias texturas que tengo previamente creadas. Para comenzar inicializo llamando a la primera función: si la surface no existe la creo, entonces le hago target, la limpio transparente y entonces puedo dibujar. Para finalizar reseteo y devuelvo la textura.

El problema? Al finalizar, TODAS LAS TEXTURAS, digamos... son la misma, o aproximadamente. Por ejemplo, el sprEliPluma tiene 8 subimagenes, en cada textura le meto una distinta, pues al finalizar... resulta que a TODAS se ha aplicado la misma subimagen... e igual con sprEliMano. ¿Qué hago mal?

También tenía antes una versión en que el SET y el RESET de la surface lo hacía SÓLo al inicio y final y, entre medio, hacía todos los get_texture y todos los draw. También fallaba.

Las texturas que modifico (textura1, textura2...) son creadas previamente en create y usadas en draw.
63
Preguntas y respuestas / Normales normalizadas en 3D
Febrero 03, 2015, 06:39:17 PM
Buenash! Pues veréis, estoy haciendo un muro curvo, poniendo distintas normales para cada parte... y me dijeron que si no las normalizo peta... o se ve peor de lo que debería.

for (i = 0; i < 9; ++i) {
d3d_vertex_normal_texture(x-50, y-50, 0, cos(degtorad(i*11.25)), sin(degtorad(i*11.25)), 1, 4, 0);
d3d_vertex_normal_texture(x-50-550*cos(degtorad(i*11.25)), y-50-550*sin(degtorad(i*11.25)), 600, cos(degtorad(i*11.25)), sin(degtorad(i*11.25)), 1, i, 8);
}


Con ese código se dibuja un triángulo, si os fijáis tengo cos y sin en las normales.

La idea es que primero viene la normal 1,0,1 i al final 0,1,1, es decir, apuntar a la derecha, y abajo. Entremedio hay un cono de normales. Pero ninguna de ellas está normalizada... ¿esto afectará a la calidad? Veo que esto funciona, pero quizás no todo lo bien que podría funcionar... si fuera así, cómo hago para normalizarlas?
64
Buenash! Pues dibujo un wall en 3D, pero necesito aplicarle un Skew (función de transform que tiene el editor de GM) vertical mediante código (mediante el editor le baja la calidad MUCHO, y no puedo estar haciendo skews constantemente). Alguien tiene idea?

Exactamente esto: Quizás alguna forma "eficiente" de pre-tratar la textura (sprite) antes de mandarla a la función de dibujo? (no sé nada del tema ni por dónde iniciar)

Y una duda auxiliar: cómo podría, quizás con el método anterior, fusionar dos sprites en una misma textura, para mandarla al d3d_draw_wall? (no quiero dibujar dos walls, problemas de z-fighting y eficiencia) Aprovechando que, quizás, aplico un skew por código al sprite ANTES de ponerlo en la textura (o antes de mandar la textura a dibujo) podría también añadir otro sprite encima del anterior, y hacer una textura con ambos sprites.
65
Buenas! Pues tengo el siguiente modelo 3D creado con un trianglestrip, he activado el d3d_set_culling a true para solo ver las caras frontales.. y no se ve nada!

d3d_primitive_begin_texture(pr_trianglestrip, sprite_get_texture(tilPlaSuelo, 3));
        d3d_vertex_normal_texture(x-50, y+50, +00, 0, 1, 1, 0.0, 0.50);
        d3d_vertex_normal_texture(x-42, y+54, +00, 0, 1, 1, 0.1, 0.54);
        d3d_vertex_normal_texture(x-31, y+50, +00, 0, 1, 1, 0.2, 0.50);
        d3d_vertex_normal_texture(x-31, y+58, +00, 0, 1, 1, 0.2, 0.58);
        d3d_vertex_normal_texture(x-23, y+50, +00, 0, 1, 1, 0.3, 0.50);
        d3d_vertex_normal_texture(x-23, y+55, +00, 0, 1, 1, 0.3, 0.55);
        d3d_vertex_normal_texture(x-14, y+50, +00, 0, 1, 1, 0.4, 0.50);
        d3d_vertex_normal_texture(x-14, y+53, +00, 0, 1, 1, 0.4, 0.53);
        d3d_vertex_normal_texture(x-03, y+50, +00, 0, 1, 1, 0.5, 0.50);
        d3d_vertex_normal_texture(x-03, y+61, +00, 0, 1, 1, 0.5, 0.61);
        d3d_vertex_normal_texture(x+08, y+50, +00, 0, 1, 1, 0.6, 0.50);
        d3d_vertex_normal_texture(x+08, y+54, +00, 0, 1, 1, 0.6, 0.54);
        d3d_vertex_normal_texture(x+21, y+50, +00, 0, 1, 1, 0.7, 0.50);
        d3d_vertex_normal_texture(x+21, y+54, +00, 0, 1, 1, 0.7, 0.54);
        d3d_vertex_normal_texture(x+36, y+50, +00, 0, 1, 1, 0.8, 0.50);
        d3d_vertex_normal_texture(x+36, y+57, +00, 0, 1, 1, 0.8, 0.57);
        d3d_vertex_normal_texture(x+50, y+50, +00, 0, 1, 1, 1.0, 0.50);
    d3d_primitive_end();


Qué puede estar fallando? Todas las caras están mirando hacia arriba (eje z positivo) y tienen una normal también apuntando hacia arriba, aunque un poco torcida hacia abajo, pero debería igualmente verse desde arriba...

por lo que leí los vértices deben estar en counter clockwise, y eso lo cumplo con los tres primeros, los cuales NO SE VEN, y con los siguientes... debería ser automático o como va esto?

Estoy dibujando esto:



Una espécie de sierra plana, pero pegada al y+50, y que se extiende para abajo.
66
Buenash! Veréis, mirado desde arriba, tengo al personaje, con su variable pDir, y la cámara, con cDir. Indican, respectivamente, a dónde mira el personaje y la cámara, ambos entre 0 y 360. Si, por ejemplo, cDir = 90 (cámara), mira hacia arriba, al moverme a la derecha pDir = 0, y a la izquierda pDir = 180. Si cDir = 180, al moverme a la derecha pDir = 90, atrás pDir = 0... digamos, la dirección del personaje cambia dinámicamente según la de la cámara. La cámara es en tercera persona.

Quiero que, al girar la cámara, detecte a dónde está mirando para cambiar su sprite. Tengo 4 sprites, mirando abajo, arriba y a cada lado (8 en el futuro). Quiero que, al girar la cámara a su alrededor, los sprites cambien. Si el PJ mira a la derecha, y muevo la cámara colocándome a su frente, el sprite del personaje debería cambiar a mirando hacia abajo. Es decir, al girar la cámara a su alrededor, que el sprite cambie, para que se vean en tiempo real todos los ángulos del personaje (arriba, abajo, laterales...).

Tal como está ahora, por ejemplo, si tengo al personaje mirando hacia abajo, y muevo la cámara 180º a su alrededor, no cambia, cuando debería cambiar al sprite que mira hacia arriba. Igual que si, mirando el PJ hacia abajo, giro la cámara 90º en sentido antihorario, me pongo a su derecha, es decir, el personaje cambia y su sprite pasa a mirar a la izquierda.

tengo algo así:

if (abs(objCam.dir-dirMira) < 45) sprite_index = sprIreUStill;
    else if (abs(objCam.dir-dirMira) < 135) {
        sprite_index = sprIreRStill; if (dirMira < objCam.dir) image_xscale = 1; else image_xscale = -1;
    } else sprite_index = sprIreDStill;


Pero hay conflicto cuando pasas del 0 al 360 y viceversa, y no acaba de funcionar... usando la dirección de la cámara y del personaje debería ser suficiente. En general, si ambas direcciones son < 45 significa que el personaje mira en la misma dirección que la cámara, y como es tercera persona, pues el personaje mira hacia arriba (UStill de UP). Luego tengo RStill de Right (para left hago image_xscale = -1), y DStill de Down. Cómo iría bien?

PD: no puedo rotar un sprite. DEBEN ser 4 sprites distintos (3, pues el lateral hago image_xscale = -1), ya que en realidad son sprites distintos, pues es vista de RPG, no de top shooter, por ejemplo)
67
Preguntas y respuestas / Resolución píxeles
Julio 26, 2014, 10:00:25 PM
Buenash!



Tal como véis, los píxeles se destrozan... meto una view en la screen y el doble en el viewport, tipo pixel art, pero... cómo se puede solucionar? Tengo puesto el keep scaling en global options, así que no sólo se agranda al doble sino al máximo que pueda (no me molesta) pero este error sí
68
Preguntas y respuestas / Proteger savegames
Junio 28, 2014, 03:13:30 PM
Hoolas! Pues bien, en mi juego quiero seguir una mecánica similar a Demon's Souls y Dark Souls: muerte inevitable. Básicamente, la partida se guarda constantemente y tras cada decisión importante, así que si vas a morir no podrás cambiarlo, y la muerte tiene consecuencias, que aún no he decidido, pero no serán buenas :) en Demon's Souls al morir la partida se guardaba, y perdías todo tu "dinero", jodiendo mucho.

Pero aquí es difícil.... ya que basta conque el usuario copie el archivo de guardado y, si muere en un punto clave, lo borre y coloque el anterior...

qué puedo hacer para evitar esto? Que el jugador no pueda tocar, copiar ni borrar los archivos de guardado? Si no puedo toda esta idea se va a la *****, básicamente :(

Por ejemplo, crear y leer el archivo de guardado en una carpeta dentro de system32 o por ahí... pero podría dar problemas de escritura, y si el sistema de archivos cambia de un windows a otro... o ocultar el archivo para que el usuario no pueda borrarlo?
69
Preguntas y respuestas / Bordes de la room!!
Junio 27, 2014, 10:19:48 PM
Buenash! Pues bien, cuando el PJ llega al borde de la room, digamos que deja de estar en el centro de la pantalla y se mueve hacia el lado, es el funcionamiento normal de las views. Hay alguna manera de evitar esto y que, aún yendo al borde de la room, siga estando en el centro, pintando de negro el trozo de room "imaginario", sin tener manualmente que agrandar la room y añadir espacio basura? Básicamente, cuando vaya a esconder secretos, viendo el usuario que siempre yendo al final del room pasa eso, si ve alguna room en que no pasa se dará cuenta que he escondido probablemente algo, pues verá que no es el final real de la room!
70
Preguntas y respuestas / Sonidos entrecortados!
Junio 26, 2014, 08:45:46 PM
Buenash! Pues he cargado mis musicas a GM Studio, en la ventana de carga se oyen bien si les doy a la flecha verde pero in game se entrecortan, se oyen FATAL...

he probado tanto a cargarlas en mp3 como en wav convertidas (GM las distinguió porque vi como el icono cambió de rojo a verde), y nada... se oye fatal. He probado tanto uncompressed como compressed, los 4 parametros de abajo por defecto, maxima calidad... qué tengo que hacer?

ya la estoy llamando con audio_play_sound(musicaSonando, 30, true); y en opciones tengo activado el nuevo engine de sonidos. Algo se me escapa para que se oiga tan mal...
71
Buenas, GM Studio me trae de cabeza...

pregunta: cuando asigno un objeto a una variable... aquello que se guarda en esa variable qué es? el id? el objeto?

Luego, si quiero comparar esa variable con un objeto qué debo hacer...

if (variable == objPersonaje)

o

if (variable.id == objPersonaje)

sonará extraño, pero por ahora me funcionaba el primer caso, y en cierto punto del programa sólo me funciona el segundo... qué pasa aquí?!

toda mi vida he hecho lo primero bien, y hasta ahora sí, pero veo que la mitad de mi juego funciona con lo primero y la otra mitad ignora el programa si no especifico variable.id... COMPROBADO!

extra: hay alguna diferencia si el objeto que asigno a la variable es una instancia obtenida mediante instance_nearest o instance_create, o si le asigno un nombre genérico de objeto (objPersonaje)? A veces me guarda el id, otras me guarda el número de objeto (0 si es el primero en crearse, etc) y me estoy haciendo un lío. En el ejemplo que os puse, intentaba comparar:

variable == ENEM

donde ENEM era instance_nearest(x, y, objEnemigo)

en este caso no daba correcto, porque variable era 10, y ENEM era 100000. Solución? variable.id == ENEM... pero hasta ahora he usado variable == ENEM todo el rato y funcionaba bien!
72
Preguntas y respuestas / Rotar surface en 2D
Junio 02, 2014, 11:19:43 PM
Buenash! Estoy usando el draw_surface_ext para aplicarle una rotación a mi sprite, pues de otra forma requeriría cálculos complejos. El problema es que no me pone el origen de la surface en el centro de ésta y me rota mal, desde la esquina. Cómo hago que el origen sea el centro, o rotar desde el centro? Estoy en 2D, nada de 3D.

Y otra cosa: si creo la surface con..

var surf; surf = create_surf....

temporal para un fragmento de codigo (la creo, dibujo en ella, dibujo la surface y al final del fragmento de codigo se borrará) es necesario chequear que exista antes de llamarla, o en algún lado?
73
Preguntas y respuestas / Borrad este tema
Mayo 15, 2014, 11:31:48 PM
Podéis borrar este tema, "resuelto"
74
Preguntas y respuestas / Deformar la realidad
Mayo 07, 2014, 04:57:24 PM
Buenash! Alguien sabe cómo "deformar la realidad"? Un ejemplo simple: un pequeño agujero negro que atraería todo lo que hay alrededor, verías como todo se deforma acercándose a él. Ya sean las tiles o los backgrounds o los objetos, todo se deformaría. Lo mismo que esto para todo tipo de efectos. Cómo pueden hacerse? Leí algo de surfaces pero no lo tengo claro... la idea es capturar un trozo de lo que se muestra en pantalla y ahí modificarlo, pero no sé por dónde empezar para saber cómo hacerlo
75
Buenash! Estoy haciendo mi juego en Game Maker Studio Standard. En mi PC todo iba perfecto (windows 8, 64 bits), pero he creado el ejecutable (instalador) para probarlo en otro pc (Windows 7 home premium, 64 bits), al ejecutarlo a veces me da el error "out of memory", y otras veces:


___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of Draw Event
for object Ctrl:

Fatel Error: Can not create vertex buffer
at gml_Object_Ctrl_Draw_0
############################################################################################

En mi PC Windows 8 me iba perfecto. A qué puede deberse? Hacerlo en windows 8 lo hace injugable en otros windows inferiores?

El juego es MÍNIMO. Aunque tenga vista 3D, todos los sprites y fondos son pequeños (no sobrepasan los 256x256), sólo tiene una room y no hay casi nada... a qué puede deberse?
76
Buenash!! En GM8 había una opción para que, en pantalla completa, la resolución no aumentara, es decir, si la view era 960x720, en pantalla completa seguiría siéndolo, y el fondo se rellenaría con negro (o el color elegido). Quiero esa opción pero en GM Studio... no funciona, vamos. Qué puedo hacer?
77
Preguntas y respuestas / Licencias
Marzo 22, 2014, 01:57:05 PM
Buenash! Veréis, en mi juego, todas las músicas que usé de diversas páginas gratuitas, tenían licencia Creative Commons Share alike. NO ERAN No-distribute, así que se pueden usar en tus cosas (vídeos, etc) siempre y cuando lo tuyo también tenga la misma licencia (CC SA en este caso). El tema es:

-Se puede usar CC Share Alike para un videojuego? Porque he estado leyendo y no lo recomiendan. Alguno de vosotros lo ha hecho para su juego y me aconseja? Y es también válido para demos? (Supongo que sí), a parte supongo que es gratuita también :)

espero opiniones de los que sepáis del tema o ya lo hayáis hecho para vuestros juegos
78
Buenash! Pues estoy haciendo mi juego con 3D en GM8, y quiero importarlo a Studio Standard, que creo que el 3D es mejor, y a ver si así me va más fluido en PC's más antiguos, pero hay dos funciones que no están: message_background y object_set_parent. Cómo puedo hacer lo mismo sin esas funciones? CON QUÉ RAZÓN quitan funciones porque les da la gana, sobretodo la segunda, con lo útil que es?

Tampoco me reconoce show_message_ext, y todos los acentos se los ha comido y sustituido por un símbolo raro. Veo imposible esto xD

Y realmente en GM Studio el 3D está más optimizado que en GM8 e irá más fluido? Porque no es normal que no uso ni un modelo, sólo cubos, y en mi PC viejo me va lento (ya traté de optimizarlo al máximo y nada)
79
Buenash! Necesito ayuda casi desesperadamente xD he programado un ataque para el enemigo: golpea el suelo y, si estoy en el suelo, me daña y ralentiza pero, a veces, al hacerlo, el juego se crashea. Se queda todo bloqueado, sin mostrar ningún error, y salta "no responde". Igual que cuando se ejecuta un bucle infinito, pero no he hecho ningún bucle! No veo razón para que suceda. Qué razones, a parte de bucle infinito, producen esto?
80
Buenash! Pues quiero dar al usuario la opción de reducir la resolución de pantalla para optimizar el 3D si su PC va lento. Cabe decir que me compré mi PC nuevo hace poco, todo tiene mucha potencia excepto la tarjeta gráfica. Probé Crysis 2 y Mirror's Edge. El primero no me iba. El segundo iba lento. La resolución de mi pantalla, y por defecto, es 1280x1024. Bajé a 800x600 (o 640x480 mejor) y pude jugar de lujo a un ritmo constante, !y casi sin notar la diferencia!

Cómo puedo dar al usuario esta opción? El juego por defecto es 960x720, y por muy grande que sea tu pantalla no se aumenta más para no perder calidad (bordes negros). Quiero dar la opción de bajar a 640x480 por si el PC del usuario es lento y mi juego en 3D no funciona...

he usado display_set_size pero luego, cuando uso display_mouse_get_x() e y para usar el ratón, no funciona (la esquina inferior derecha de la pantalla corresponde al centro de la visión en el juego), y si pulso F4 para volver a modo ventana el juego se buguea y al volver a pantalla completa la posicion no corresponde... un jaleo. Y no sólo eso, al querer volver con display_set_size(960, 720) tras haber ido a 640x480 NO FUNCIONA y se queda con la resolución baja! (sin haber salido a modo ventana, que provoca otros errores)

ayuda en este tema de las resoluciones para hacer mi juego accesible a PCs más modestos?