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

1
seria como dice kakashigna algo asi como usar random (acordandote de usar round para quitarle decimales) y decidir entre sus x valores posibles

pongamos el ejemplo de elegir entre 3 acciones:

eleccion=round(random(2));
switch(eleccion){
case 0: ACCION 1;break;
case 1: ACCION 2;break;
case 2: ACCION 3;break;
}


No recuerdo muy bien, pero se que con el random de game maker pocas veces olerias el caso 0, pero entraba dentro de las posibilidades, tendras constancia de que la que mas se repite es el caso 1 entre esos 3
2
Preguntas y respuestas / Re: tama?o maximo de un fondo
Diciembre 24, 2009, 01:06:49 PM
SI, te lo confirmo, y ocurre a partir de los 2000 y pico pixels.. no sabria decirte la cifra con seguridad,  por seguridad yo en mi juego lo que hice fue, o intentar apa?armelas para que el fondo tuviera 1500 pixels o dividirlo en 4 trozos de 1500 y con un poco de codigo dibujarlo todo seguido, aunque habiendo 4000x224 pixels por ahi en memoria de video quiza tengas un fps bajo, intenta que no ocurra eso
3
Preguntas y respuestas / Re: Que aparezca donde yo quiera
Diciembre 20, 2009, 03:46:14 PM
Eso esta fuera ya de lo que has preguntado al principio del topico, yo he hecho un ejemplo para que veas como y donde se ponia el codigo de memorizacion de la room anterior y como chequearlo y hacer al personaje aparecer en un sitio u otro. Lo que preguntas de la variable pantalla es una asignacion que he hecho pulsando control y click derecho en la room sobre el objeto de cambio de nivel y accediendo a su creation code unico
4
Preguntas y respuestas / Re: Que aparezca donde yo quiera
Diciembre 17, 2009, 10:26:28 AM
Me has entendido mal, esos codigos en ningun caso deben estar aplicados en algun evento de algun objeto, TODOS deben estar en el Creation Code de las rooms, creo que lo mejor sera que suba un ejemplo en .gmk, de todas formas te has hecho bastante lio, porque no hay que distinguir entre room_actual y room_anterior, yo solo te habia dicho que usaras global.room_anterior

El problema que teniamos era que si todas las room hacian un chequeo de la room de la que venias para colocar al personaje en una posicion u otra, la primera de todas las room daria error porque global.room_anterior aun no existiria, pues despues del checkeo venia la parte en la que global.room_anterior tomaria el valor de la room en la que estas para un posterior checkeo en una room distinta.

Entonces te habia propuesto hacer una primera room que solo tenga este codigo en el creation code:

global.room_anterior=room;
room_goto_next();

El resto es el codigo que te puse en el creation code del resto de rooms (ni personajes en evento create ni nada, ahi no tienes que tocar nada respecto a esto)

5
Facilmente, aqui en game maker tenemos como componentes posibles de un vector en 2D la X y la Y, y como propiedades de un vector tenemos las variables direction y speed (podrian ser cualquieras otras pero generalmente se usa para esto)

Bien.. supongamos que tenemos un vector, con una direccion asociada y un modulo

direccion=60; //en grados
modulo=25; //en pixels

ahora queremos hayar su componente horizontal, facilmente:

comp_horizontal=modulo*cos(degtorad(direccion)); //usamos degtorad para pasar de grados a radianes
comp_vertical=-modulo*sin(degtorad(direccion)); //usamos el - porque en los juegos el Y negativo es el que asciende

Y ahora ponle que querriamos hacer el proceso inverso, teniendo una componente horizontal y una vertical crear una direccion y un modulo, vamos a valernos de la funcion arctan2(y,x) es como una version mejorada de arctan(x) [Arco Tangente] en la que te coloca el angulo en el cuadrante correcto de las dos posibilidades que hay siempre en estas funciones inversas

direccion=radtodeg(arctan2(-comp_vertical,comp_horizontal)); //arctan2 nos devuelve el angulo en radianes lo volvemos a pasar a grados, y al mismo tiempo ponemos comp_vertical en negativo para deshacer el apa?o que hicimos
modulo=sqrt(sqr(comp_horizontal)+sqr(comp_vertical));


Y ahi lo tenemos, aplicado!

Game maker automaticamente direction y speed las subdivide en vspeed y hspeed de forma analoga a como lo he hecho antes, dependiendo de qu? detecte que tu en el codigo estes modificando, si las hspeed o vspeed o si la direccion y la speed cambiara las otras dos de una forma o la otra
6
Preguntas y respuestas / Re: Que aparezca donde yo quiera
Diciembre 16, 2009, 09:39:17 PM
Pues para inicializar una variable simplemente tienes que darle un valor por primera vez.. si yo escribo global.room_anterior=room, aparte de darle el valor de room la estoy inicializando si no existia de antes
CitarAhora una cosa como aclaraci?n, "global.room_anterior=room" ?va en el primer room en creation code?

Puess va en todos los room, pero tambien en esa primera room para inicializarlo y que no te salte error, en la primera room podrias poner simplemente el codigo:

global.room_actual=room;
room_goto_next(); //es una funcion que nos lleva a la siguiente room

y en cualquier otra room:

//ejemplo
if(global.room_anterior==room6){
  instance_create(233,144,Personaje);
}
if(global.room_anterior==room10){
  instance_create(544,128,Personaje);
}
//... y un sin fin de posibilidades


//y finalmente cambiamos global.room_anterior a la actual para un siguiente cambio de nivel para que el proximo nivel pueda hacer lo mismo que ha hecho este
global.room_anterior=room


Pero este codigo que te acabo de poner deberas cambiarlo un poquitin dependiendo de la room en la que estes, pues cada room es distinta y tendra distintas entradas, tendras que ir modificandolo a tu gusto
7
Preguntas y respuestas / Re: Que aparezca donde yo quiera
Diciembre 16, 2009, 08:35:01 AM
Bien.. en cada room haras una cosa, en todas las room pones en el creation code, en la ultima linea (OJO, es importante que si tienes mas codigo como el que te puse en el anterior post en el creation code, que este trozo que te estoy poniendo lo pongas despues del que te di o al final de todo el creation code:
global.room_anterior=room
De esta forma despues de haber hecho una anterior comprobacion de la room para posicionar al personaje con este codigo lo que hacemos es cambiar la variable global room_anterior a la room actual, asi cuando cambiemos de nivel y queramos unas coordenadas determinadas dependiendo del room pondriamos el siguiente codigo:

//ejemplo
if(global.room_anterior==room6){
  instance_create(233,144,Personaje);
}
if(global.room_anterior==room10){
  instance_create(544,128,Personaje);
}
//... y un sin fin de posibilidades


//y finalmente cambiamos global.room_anterior a la actual para un siguiente cambio de nivel para que el proximo nivel pueda hacer lo mismo que ha hecho este
global.room_anterior=room


Bien, solo una cosa mas, haria falta que inicializaras esta variable al comenzar el juego, con una room que este la primera de todas que se dedique a inicializar variables y acto seguido haga room_goto_next(), porque si no la inicializas y en la primera room ya haces la comprobacion seguro que te salta error de unkown variable
8
Preguntas y respuestas / Re: cambiar a codigo
Diciembre 16, 2009, 12:05:50 AM
Para el evento create de tu objeto quedaria asi:

hspeed=-1;
disparar=0;
vida=10;


Para el evento step quedaria asi:

if distance_to_object(jugador)<=180
{move_towards_point(jugador.x,jugador.y,1)
disparar=1;}

if(x>jugador.x){

  if(disparar=1){

sprite_index=SPRITE;
image_speed=1;
image_single=0;
if(round(random(20))=1){
  objeto_creado=instance_create(x+0,y+0,OBJETO);
  objeto_creado.direction=180;
  objeto_creado.speed=0;
}
}
}
if(x<jugador.x){

  if(disparar=1){

sprite_index=SPRITE;
image_speed=1;
image_single=0;
if(round(random(20))=1){
  objeto_creado=instance_create(x+0,y+0,OBJETO);
  objeto_creado.direction=0;
  objeto_creado.speed=0;
}
}
}

if(place_meeting(x+0,y+0,OBJETO)){
  direction=0;
  speed=0;
}


9
Preguntas y respuestas / Re: Que aparezca donde yo quiera
Diciembre 15, 2009, 11:57:01 PM
Asegurate de que tienes Activado el Advanced View en el Game maker, a la room en la que quieras que eso pase le pones en el Creation Code:

instance_create(X,Y,personaje);

Esa X y esa Y puedes poner directamente como un numero directo o podrian ser dos variables globales que quiza en la room anterior las has cambiado y puesto a un valor que te interesa para que el personaje aparezca en esas coordenadas en la room siguiente.

Creo que es la tipica situacion de un juego de rol en el que hay un nivel con varias entradas o salidas..
10
Preguntas y respuestas / Re: funcoin repeat no funciona
Diciembre 15, 2009, 10:15:50 PM
igual te interese crear un script llamado ataque2()

cada vez que lo escribas en un codigo se ejecutaria el codigo:
repeat (5) { instance_create(random(336),y-7,Jefe1_tortuganegra_obj)}
11
Preguntas y respuestas / Re: problema con instance create
Diciembre 15, 2009, 10:12:05 PM
Bien, entiendo que hayas puesto ese codigo en step porque si usas el evento collision normal si pisas el recuadro por el lado o por arriba tambien te crear? la moneda, por eso haces bien en usar ese trozo de codigo en el evento step, y dejame a?adirle la condicion de que si el vspeed de mario es < 0 ocurra eso, pero me he dado cuenta de que este codigo lo estas ejecutando desde la propia Stage1_cajasecreta_obj, verdad?? entonces simplemente con que te refieras a la propia variable X y la propia variable Y ya esta :)

if (place_meeting(x,y+8,Mario_obj) and (Mario_obj.vspeed<0))
{
instance_create(x+3,y,Stage1_moneda_obj)
instance_change(Stage1_cajavacia_obj,1)
}

12
Preguntas y respuestas / Re: ayuda con juegos antiguos
Diciembre 15, 2009, 10:00:35 PM
seria mejor que nos dijeras que errores son antes que poner los ejecutables para descargar, por otra parte C++ sigue siendo idoneo para crear un buen juego en 2D.. o incluso 3D con las librerias adecuadas, pero es mucho mas complicado y largo hacerlo.
13
Pues usa el evento animation end

y dentro pones (llamemos al sprite de lanzar rayos: spr_lanza_Rayos:
if(sprite_index==spr_lanza_Rayos){}

asi solo funcionara cuando el sprite de lanzar rayos acabe; por lo del doble == no te preocupes, en game maker se soporta con un solo igual en comparaciones, en otros lenguajes ya no..
14
Para parar el sprite cuando acabe, pon en el evento animation end:
image_single=image_number-1


Luego.. para eso que dices que quieres que lo cree en el momento en que la subimagen sea la 1 y no la 0 es if(image_index==1){} deberia funcionar.. pero parece que si solo hay dos subimagenes como que va todo muy rapido y en un step estas en la subimagen 0 y en el siguiente en la 1.. o que velocidad tiene?
15
Preguntas y respuestas / Re: sentencia for no le entiendo
Diciembre 14, 2009, 01:20:47 AM
Perefcto! acuerdate que para hacer rampas es imprescindible que el sprite de la rampa tenga precise collision check activado