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 - Jucarave

196
Cita de: aaron966 en Agosto 31, 2011, 10:14:17 PM
Muy bueno, me gusta per?, como puedo hacer que ese cuadro en vez de ser de color..... sea un sprite

PD:Ese es el unico inconveniente que tengo por lo otro es perfecto, muchas gracias,
Saludos

Hola, mira en la parte final del codigo dice:

[gml]//Dibujamos el cuadro amarillo
draw_set_color(c_yellow);
draw_rectangle(32*floor(x/32),32*floor(y/32),32*floor(x/32)+32,32*floor(y/32)+32,0)
draw_set_color(c_black);[/gml]

Esto es lo que tienes que alterar. Si quieres dibujar un sprite, entonces usa el siguiente codigo


[gml]//Dibujamos el sprite
draw_sprite(sprite_index,image_index,32*floor(x/32),32*floor(y/32));[/gml]

NOTA:
1. En este caso debes cambiar "sprite_index" por el nombre del sprite que quieras dibujar ej: "spr_Carro" sin comillas
2. "image_index", es la sub imagen, si tu sprite tiene varias imagenes entonces aqui deberas decir cual quieres mostrar ej: "0" sin comillas
3. Los otros valores los puedes dejar asi, pero recuerda cambiar el "32" por el tama?o de tu rejilla


Saludos
197
Hola, no estoy seguro si esto es lo que buscas, pero creo que te dara una idea.

Espero que entiendas c?digo, hay otros modos de hacerlo (puede que mas sencillo) pero no recuerdo XD

En el evento Draw de algun objeto que quieras que controle el mouse pones esto

[gml]//Posicionamos el objeto debajo del mouse
x = mouse_x;
y = mouse_y;

//Dibujamos una cuadricula
for (i=0;i<=room_width;i+=32){
    for (j=0;j<=room_height;j+=32){
        //Dibujamos lineas horizontales y verticales
        draw_line(i,j,room_width,j);
        draw_line(i,j,i,room_height);
    }
}

//Dibujamos el cuadro amarillo
draw_set_color(c_yellow);
draw_rectangle(32*floor(x/32),32*floor(y/32),32*floor(x/32)+32,32*floor(y/32)+32,0)
draw_set_color(c_black);[/gml]

Notas:
1. Ese objeto debe ser unicamente para el mouse
2. Los numeros '32' que encuentres los puedes reemplazar por el tama?o que quieres que sea la cuadricula
3. al final donde dice 'draw_set_color(c_yellow);' es el color del cuadro
198
significa "o", es decir que una de las dos condiciones tiene que ser correcta... veras, no puedes decir "aungulo menor a 90 y angulo mayor a 270" ya que no hay ningun numero que sea menor a 90 y mayor a 270 al mismo tiempo.

Por eso se usa el o, es decir que el angulo es menor a 90 o mayor a 270...

pero el o no se puede usar en "direccion mayor a 90 o direccion menor a 270" ya que siempre se cumpliria.

en una condicion y ambas condiciones tienen que ser verdaderas para que se cumplan

en una condicion o solo una de las dos condiciones tiene que ser verdadera para que se cumpla

Normalmente se hace con "altgr+1" o con "alt+124"
Saludos.
199
Hi, podrias intentar:

[gml]image_xscale = -1;
if (point_direction(x,y,mouse_x,mouse_y) < 90 || point_direction(x,y,mouse_x,mouse_y) > 270){
    image_xscale = 1;
}[/gml]

Saludos.

EDIT: ya vi que lo resolviste XD.... ah bueno
200
Preguntas y respuestas / Re: Subir pendientes
Agosto 22, 2011, 10:48:28 PM
Hola, espero que te funcione, para bajar seria asi:

[gml]if (keyboard_check(vk_right)){
   for (i=0;i<=32;i+=1){
       if (place_free(x+4,y+1)){
           if !(place_free(x+4,y+i)){
               x += 4;
               y += i-1;
               exit;
           }
       }
   }
}[/gml]

este tendria que ir antes de el de subida:

[gml]if (keyboard_check(vk_right)){
   for (i=0;i<=32;i+=1){
       if (place_free(x+4,y+1)){
           if !(place_free(x+4,y+i)){
               x += 4;
               y += i-1;
               exit;
           }
       }else{
           if (place_free(x+4,y-i)){
               x += 4;
               y -= i;
               exit;
           }
       }
   }
}[/gml]

Yo ciertamente lo tengo en un juego mio y funciona...


PD: nunca pongas [gml]for (i=0;i>=32;i-=1){[/gml] ya que eso seria un ciclo infinito (o un error, no estoy seguro).

PD2: los valores de 32 y 4, son muy relativos al tama?o de tu sprite... Para mi juego uso sprites de 32*32 pixeles por lo que un movimiento de 4 esta bien... Asi que fijate bien y adecua eestos valores a tus necesidades

Saludos
201
Preguntas y respuestas / Re: Subir pendientes
Agosto 22, 2011, 03:07:34 PM
el codigo es sencillo, pero puede ser dificil de entender al principio

supongamos que para moverte usas

[gml]if (keyboard_check(vk_right)){
    x += 4;
}[/gml]

Asi que usas el siguiente:

[gml]if (keyboard_check(vk_right)){
    for (i=0;i<=32;i+=1){
        if (place_free(x+4,y-i)){
            x += 4;
            y -= i;
            exit;
        }
    }
}[/gml]

basicamente lo que hace es buscar un espacio libre para poderse mover, en el i<=32 cambias el valor de 32 dependiendo de la inclinacion de la rampa.

Este codigo te servira para subir rampas/escaleras en un juego de plataformas, pero no para bajarla (para eso tienes que modificar un poco el codigo)

Saludos.
202
Preguntas y respuestas / Re: Vectores Normales [3D]
Agosto 09, 2011, 09:48:20 PM
Hola pues nunca trabaje normales con Game Maker, pero ahora los trabajo con C++, se debe parecer un poco XD...

Los normales son la direccion en el que el vertice reflejara la luz, este debe tener una direccion perpendicular al triangulo, pero lo malo (en C++ pero creo que en GM tambine) es que cada vertice solo puede tener un normal, es decir que si tienes un cubo (6lados, 12triangulos) debes tener 24 vertices (4 por cara) en vez de lo minimo necesario que es 8, calcular los normales es un trabajo muy tedioso, por ejemplo si tienes un cuadrado mirando hacia el eje Y+

(-3,0,3),(3,0,3),(-3,0,-3),(3,0,-3) //posiciones xyz de cuatro vertices

Entonces yo quiero que este cuadrado refleje la luz hacia el eje Y+ entonces los normales de cada vertice seria:

(0,1,0)//xn, yn, zn

cuando yn es positivo es hacia el y+, y contrario -yn=-y, lo mismo para el xn y zn


Esto es complicado de entender y muy maluco de calcular XD. Espero que me medio hayas entendido, suerte
203
podrias usar una DLL para comprimir los archivos que no quieren que vean con contre?a, ademas de eso lo tendras compreso ;D

No recuerdo el nombre de la DLL, hay una que yo usaba y era muy util (para lo que necesitaba)

Si me acuerdo ahora, edito.

Saludos.
204
no se, nunca he tenido problemas al hacer esto :) pero prueba lo siguiente

[gml]recibe = collision_rectangle(x-32,y-32,x+32,y+32,objataque,0,0);
//el x-32,y-32,x+32,y+32 ya depende del tama?o de tu personaje

if not (recibe){ exit; }
if (recibe.id != ultima.id){
    vida -= recibe.dano;
    ultima = recibe.id;
}[/gml]


mira haber si te sirve de algo :-[

Saludos.

EDIT: Aunque ahora que lo pienso presentaria problemas si lanzas dos ataques seguidos...

EDIT2: Para arreglar lo de ataques seguidos puedes hacer lo siguiente:

Con el objeto de ataque en create, creas un array y un indice

[gml]ataid = 0; //ids total de enemigos atacados
atacado[0] = 0; //Array de enemigos atacados[/gml]

luego en step:

[gml]var recibe, i;
recibe = collision_rectangle(x-32,y-32,x+32,y+32,objenemigo,0,0);
//el x-32,y-32,x+32,y+32 ya depende del tama?o de la bala

if not (recibe){ exit; }
for (i=0;i<=ataid;i+=1){
    if (recibe.id != atacado){
        recibe.vida -= dano;
        atacado = recibe.id;
        //Aumentamos y creamos un nuevo espacio en el array.
        ataid += 1;
        atacado[ataid] = 0;
    }
}[/gml]


La verdad estoy improvisando, no lo he probado pero creo que funciona ;)
205
pues si vas a tener los archivos en una carpeta entonces primero tienes que a?adirla al game maker:

[gml]global.ropa = sprite_add("ropas/ropa.bmp",no recuerdo el resto de parametros ^_^);

luego draw_sprite(global.ropa,......);[/gml]

ahora bien, si el sprite lo tienes en GM entonces

[gml]global.ropa = spr_uniforme; //o el nombre de tu sprite

luego
dra_sprite(global.ropa,........)[/gml]

Saludos
206
Preguntas y respuestas / Re: Array Tridimensional
Julio 22, 2011, 03:13:42 PM
Tambien se podria usar asi:

un array bidimensional xy[x,y] que contenga la informacion de z

ej: [gml]xy[1,1] = 20;[/gml]

y un array bidimensional z[xy,z] que contenga la altura

ej: [gml]z[20,1] = 15;[/gml]

etonces:

[gml]show_message(z[xy[1,1],1]);[/gml]
207
Preguntas y respuestas / Re: problema con sombras
Julio 19, 2011, 02:59:32 PM
Cita de: Zeit en Julio 19, 2011, 06:36:07 AM
Hola, yo usar?a:

1. sprite_draw(sprite_del_perdonaje,subimagen,x,y); para el personaje..
2. sprite_draw_ext(sprite_del_perdonaje,subimagen,x,y,1,1/2,0,c_black,1/2); para la sombra...
3. en caso de colisionar con un objeto con menor depht NO dibujar la sombra.

Saludos.

De hecho primero tienes que dibujar la sombra, sino te quedara encima del personaje

[gml]draw_sprite_ext(spr_personaje,image_index,x,y,image_xscale,image_yscale,1,c_black,1); //para la sombra, cuadra los valores a tus necesidades
draw_sprite(spr_personaje,image_index,x,y);[/gml]

De este modo ambos quedaran en depth -2, por lo que la sombra quedara sobre los objetos solidos pero el personaje se dibujara sobre la sombra debido al orden.


Saludos
208
mmm eso funciona :D gracias.
209
Hola a todos, es hora de un pregunta que tenia en la cabeza desde hace un buen tiempo... Es posible leer y obtener los nombres de todos los archivos localizados en una carpeta con GM?

La verdad lo hab?a estado pensando pero no conozco alguna funci?n que lo haga...


Gracias de antemano.

Suerte.
210
espero que entiendas sobre el GML, si no... creo que quedaras en las mismas :-[

podrias poner en el step del tanque enemigo:

[gml]image_angle = point_direction(x,y,obj_Player.x,obj_Player.y);[/gml]

eso hara que el tanque siempre mire al personaje... ahora bien, si quieres que ademas se prepare para perseguirlo puedes hacer esto:

[gml]image_angle = point_direction(x,y,obj_Player.x,obj_Player.y);
direction = image_angle;[/gml]

Claro que ese depende de que tipo de codigo usas para el movimiento...

y por ultimo, si quieres que te siga (mire) dependiendo de la distancia, puedes hacer esto:

[gml]if (point_distance(x,y,obj_Player.x,obj_Player.y) <= 300){
image_angle = point_direction(x,y,obj_Player.x,obj_Player.y);
direction = image_angle;
}[/gml]

Saludos y suerte.