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

1
Si estas desactivando todas las distancias y solamente creas una textura con el tama?o y el lugar de lo que estas viendo en el momento de pausarla va a pasar eso, porque es justo lo que tu c?digo esta pidiendo que se haga.
Es decir,
sacas una foto de lo que pasa en la view y desactivas todas las instancias. El espacio que ocupe la textura que creas para el background va a funcionar bien, pero en cuanto salgas del tama?o de la textura que creaste se van a dejar de ver las instancias (porque las desactivastes) y se van a dibujar los tiles y los backgrounds porque a estos no los desactivas.

Incluso creo que tu error de poner
[gml]background_create_from_screen(view_yview,view_xview,view_xview+view_wview,view_yview+view_hview,0,0)[/gml]
en lugar de esto como dice Killer:
[gml]background_create_from_screen(view_yview,view_xview,view_wview,view_hview,0,0)[/gml]

Te ayudo con la confusi?n, porque la imagen que creabas era m?s grande de lo que estabas viendo en esa view y surg?a el efecto de que pareciera que a la distancia dejaba de funcionar, cuando desde un principio estaba mal planteado el c?digo.

Realmente no tengo idea de como puede afectar la performance del juego, pero siguiendo esa l?gica con el c?digo lo que tendr?as que hacer es:
[gml]background_create_from_screen(0,0,room_width,room_height,0,0)[/gml]

Saludos.
2
Capaz que tenias marcado el "relative"( ue lo que hace es sumarle el valor que tenas a la variable, en este caso 0, y siempre se segu?a cumpliendo)

Con lo de la vida:
Vos tenes el objeto, por ejemplo, obj_enemigo

En el evento create del obj_enemigo pones
Set variable vida = 100;

Y en el lugar donde pusiste vida = vida -1, en lugar de poner "if vida equal to 0.", poner "if vida smaller than 0".

Tambi?n f?jate de haber escrito de la misma manera vida las dos veces, porque las may?sculas importan.
3
1. El problema de la variable vida:
Te dice eso porque en ningun momento le asignaste un valor a la variable vida, y esa variable no existe para ese objeto. Lo que tenes que hacer es poner en el evento create:

[gml]vida = 100;[/gml]

Y en lugar de usar If vida==0, usa If vida<=0, porque a veces puede darte negativo.

2. El problema con el room.

El objeto que dice
"if score is larger than 9
Go to next room"

?Lo tenes en todas las rooms igual no? Lo que esta pasando es que estas en el nivel 1, haces 10 puntos, pasas al nivel 2 (todav?a tenes 10 puntos) y como ve que tenes nuevamente mas que 9 pasa al siguiente nivel, hasta que se queda sin niveles.

Lo que podes hacer son 2 cosas:
"if score is larger than 9
      set score 0
      Go to next room
end if"

Con lo cual el score se pone a 0 al pasar de pantalla, y fin del problema.

Sino, si queres conservar el puntaje, lo que tenes que hacer es asignar un valor distinto como objetivo para cada nivel. Osea en el nivel 1 tenes que hacer que el objetivo sean 10 o mas puntos, en el nivel 2 tenes que hacer 40 o m?s puntos, etc....

Eso lo podes hacer de muchas formas, la m?s f?cil de hacer si reci?n empezas es crear un objeto por cada room que haga ese chequeo.
Ose el objeto obj_chequearNivel1, obj_chequearNivel 2, donde cambias el c?digo en cada uno con el puntaje que queres que se supere.

Otra forma m?s elegante de hacerlo es tener un solo objeto y poner una pieza de c?digo en el evento create y poner:
[gml]
puntajeASuperar = 0;//el puntaje a superar en el nivel
switch (room) {// seg?n que nivel este
    case rm_nivel1:// si esta en el nivel llamado rm_nivel1
        puntajeASuperar = 10; // el puntaje a superar es 10
    break;
    case rm_nivel2:// si esta en el nivel llamado rm_nive2
        puntajeASuperar = 40;// el puntaje a superar es 40
    break;
    case rm_nivel3://si esta en el nivel llamado rm_nivel3
        puntajeASuperar = 60;// el puntaje a superar es 60
    break;
}
[/gml]

Y despues en el evento step de ese objeto
[gml]
if (score>=puntajeASuperar) {// si superaste el puntaje
    if (room_exists(room_next(room))) {// y hay un siguiente nivel.
         room_goto_next(); // pasar al siguiente nivel;
    } else {// Sino hay m?s niveles quiere decir que terminaste el juego.
         // Si queres hacer que termine el juego y muestre un mensaje pone
         show_message("Fin del juego! blablabla");// mostrar mensaje
         game_end(); // terminar el juego.
         // o sino podes hacer que se reinicie el juego
         game_restart();
    }
}
[/gml]

NO te olvide de poner ese objeto en todas las room que sean niveles del juego.

Saludos.

P.d: Ahora que me acuerdo, ten?s que hacer una pregunta por cada tema si no est?n relacionadas, creo que a mi me van a retar por contestar, pero ya que escribi esto lo voy a mandar :P
4
Preguntas y respuestas / Re: Probabilidad
Mayo 08, 2011, 04:50:36 PM
Podes usar esto:

[gml]
var p;
p = random(1);

if (p<0.5) {// 50%
    suerte = round(random_range(1,10))
} else {
    if (p<0.8) {// 30%
     suerte = round(random_range(10,100))
    } else {// 20%
     suerte = alguna otra cosa que quieras
    }
}[/gml]

Igualmente eso da resultados muy similares a solamente poner suerte = round(random_range(1,100)).

Saludos.


5
Bueno hace mucho que no toco GM, y lo estoy usando para un experimento.

Imaginen la siguiente situaci?n:
Tengo una variable global llamada zoom, que determina el tama?o de la view 0 de la siguiente manera.

[gml]view_wview[0] = 640*global.zoom;
view_hview[0] = 480*global.zoom;[/gml]

El tema es que si yo dibujo una GUI, se supone que deber?a verse siempre del mismo tama?o independiente del zoom. Se puede hacer esto sin tener que escalar la GUI? Osea, yo quiero renderizar la GUI, y ponerla sobre el render que hace GameMaker para evitar escalados que deformen las fonts, y otros gr?ficos y detalles de la GUI.

Se puede hacer esto?

La soluci?n que se me ocurre ahora es crear una surface, y renderizar la GUI ahi, y escalarla. O bien, escalar cada elemento de la GUI a mano.

PD:
Olvidenlo, deb? probarlo mejor antes. Casi no hay defecto al escalar la superficie y la gui no se deforma en lo m?s minimo. Recomiendo hacerlo de este modo si alguien tiene que hacer una GUI con una view con zoom.

Me respond? solo :P, por lo menos queda ac? la respuesta por si alguien le surge la inquietud.

Saludos.
6
Se guardan las instancias, sus variables, las variables globales y el room donde est?s al momento de guardar.

Lo ?nico que no se guardan son las estructuras din?micas, (las ds_algo) por ejemplo ds_list_create().

Un Saludo.

7
Preguntas y respuestas / Re: Juego para celular.
Abril 15, 2011, 09:38:23 PM
Cita de: Wadk en Abril 15, 2011, 08:37:14 PM
Cita de: Tyranus en Abril 15, 2011, 08:14:50 AMy como si fuera poco java se complila a bytecodes, que son algo asi como un c?digo intermedio, por lo cual no se traduce a codigo de m?quina (ser?a imposible teniendo en cuenta la variedad) y debe ser interpretada por la m?quina virtual acarreando un costo m?s de memoria y procesamiento.
Pero hoyga, dado que compilarlo ser?a imposible, es la mejor opci?n. Interpretar el c?digo tal cual fue escrito por el programador (como hace el GM, que o? por ah? que hasta deja los comentarios intactos al "compilar") ser?a mucho peor :P.
En realidad, los int?rpretes de bytecode son relativamente peque?os, sencillos y r?pidos.

Si se?or, simplemente quer?a ilustrar la serie de dificultades que tiene que afrontar el pobre procesador del m?vil.

8
Preguntas y respuestas / Re: Juego para celular.
Abril 15, 2011, 08:14:50 AM
Somnus, con todo respeto, si no tienes informaci?n al respecto no hables de m?s.

Es posible de hacer un "conversor", pero no tiene ninguna ventaja hacerlo por varias razones:
1- Ning?n fabricante implemento su VM (virtual Machine) de la misma manera, e incluso var?a con el modelo.
2- Es imposible reunir todas las APIS de los fabricantes (de todos los modelos), y adem?s mantenerlas actualizadas.
3- J2me esta destinada a desaparecer con el auge de los smartphones (bajando de precio continuamente) y con Android y Iphone comi?ndose ese nuevo mercado. Nadie va a gastar energ?as en desarrollar una plataforma que se va abandonar teniendo posibilidades (Con menos esfuerzo) en nuevos mercados.

Para hacer un juego en j2me solo necesitas un Thread, e iterar sobre los objetos para hacer el "step" de GM. Cualquiera que haya programado juegos en otra cosa que no sea GM sabe que es la manera m?s com?n de hacerlo.

La memoria no se acaba por necesitar muchos Threads, se acaba porque es muy limitada y tiene que ser compartida por el so del telefono, los assets del juego (graficos sonidos) y las variables el codigo y etc...  adem?s la capacidad de procesamiento de los dispositivos moviles es tambi?n muy pobre y al igual que la memoria, (cambia dependiendo del fabricante, y del modelo del dispositivo), y como si fuera poco java se complila a bytecodes, que son algo asi como un c?digo intermedio, por lo cual no se traduce a codigo de m?quina (ser?a imposible teniendo en cuenta la variedad) y debe ser interpretada por la m?quina virtual acarreando un costo m?s de memoria y procesamiento.

RESUMEN: Si quieres hacer un juego en J2me, lo cual me parece una perdida de tiempo, ponte a estudiarlo de alg?n tutorial que no es dificil.

P.d: Por favor no me manden MP por este asunto, hace a?os que no programo en j2me.

Saludos.
9
Preguntas y respuestas / Re: Duda sobre probabilidad
Noviembre 24, 2010, 11:13:04 PM
mm.. ya veo. Igualmente la solucion sirve, aqui te explico un poco m?s como adaptarlo para el uso que necesites.

Crea un script llamada asignarSubImagen:

[gml]
   if !variable_global_exits("maxSubimagen") {
       global.maxSubimagen= 11 // si no existe la variable la declara.
   }
   argument0.image_single = round(maxSubimagen*random(1))
   if ( argument0.image_single == 11) {
       global.maxSubimagen-=1
   }
[/gml]

En el evento create de cada objeto (si es un unico objeto ponelo solo en ese):
[gml]asignarSubImagen(id)[/gml]

En el evento room_start tenes que poner global.maxSubImagen = 11, por si la reinicias.

No hago un ejemplo porque no tengi ni instalado GM :P
10
Si si, exactamente eso. Nunca use GM para programar sobre red, sino te podr?a detallar un poco m?s como hacerlo.

Pero la idea es que armes un string, y lo mandes al server.
Por ejemplo asi:
datos = "crearUsuario"+":"+ nombreUsuario + ":" contrasenia

Despues en el server parseas los datos (usando el ":"), los interpretas. La primera palabra es el nombre del mensaje.
la segunda el nombre de usuario
y la tercera la contrase?a.

Despues lo guardas en tu archivo y listo!
11
Preguntas y respuestas / Re: Duda sobre probabilidad
Noviembre 24, 2010, 08:00:41 PM
obj_tipo es el objeto que vos queres crear.
"x", e "y" indican la posicion en que queres que se creen los objetos.

Si por ejemplo queres que se creen uno al lado del otro podes cambiar esa linea por esta:
[gml]
idx = instance_create(obj_tipo,x+i*separacion,y)
[/gml]

donde separacion es la separacion en pixeles que queres que tengan los objetos (Los objetos se van a crear a partir del lugar en que esta el objeto que los crea)

No me acordaba que random llevara un parametro. En ese caso pasale 1 como parametro.

Cualquier cosa segui preguntando :)
12
Para hacer eso vas a tener que implementar un protocolo sencillo de comunicaci?n entre el server y el cliente (Que seguramente algo ya habr?s implementado).

Creas un mensaje especial "crear_usuario" donde le pasas el  nombre, contrase?a, y lo envias al server. El server lo recibe, lo interpreta y modifica su archivo ini local.

Saludos!
13
Preguntas y respuestas / Re: Duda sobre probabilidad
Noviembre 24, 2010, 04:24:34 PM
Suponiendo que la subimagen que no queres que se repita sea la ultima (si no es la ultima ponela al final y listo  :))

En el evento key press de control:
[gml]
maxSubimagen = 10
for (i=0; i<6; i+=1) {
    idx = instance_create(obj_tipo,x,y);
    idx.image_single = round(maxSubimagen*random())
    if ( idx.image_single == 10) {
        maxSubimagen-=1
    }
}[/gml]

Perdon si hay erroes de sintaxis  :-[

Saludos!
14
Preguntas y respuestas / Re: Ayuda con cantidades
Noviembre 22, 2010, 07:57:58 PM
Hola georgenda!

No se que nivel tienes de GM, voy a suponer que manejas algo de GML, y que ya sabes como disparar un misil.

en el evento create, creas una variable

[GML]misiles = 3[/GML]

en el evento key press donde tenes el c?digo de disparar

[GML]
if (misiles>0) {
   tu codigo parar disparar misil
   misiles-=1;
}
[/GML]


Para lo segundo es lo mismo que lo primero solo que cambias un poco las cosas.

En create:
[GML]balas= 10[/GML]

En donde disparas las balas:
[GML]
if (balas>0) {
   tu codigo parar disparar balas
   balas-=1;
   if (balas<=0) {
       alarm[0] = 30 // lo que queres que tarde en recargar
   }
}
[/GML]

En la alarma 0:
[GML]
balas = 10
[/GML]

Espero que me entiendas. Saludos!

15
Cita de: MatuX en Noviembre 16, 2010, 11:20:41 PM
una de las formas mas facil es a la variable la suiguiente:

supongamos que  la variable vida este en 90% no, y agarres un paquete que sume 25% ahora la suma de esto dos da 115% tal cual como dijiste. lo siguiente es asi: a esos 115 le restas 100 y el resultado restale a la variable vida,
ejem:  VIDA= VIDA-(VIDA- 100);
     
      VIDA= 115 -(115- 100)
      VIDA= 115 - 15
      VIDA= 100
espero que te sirva
 
 
EDIT:

De hecho ese c?digo es err?neo, si VIDA vale menos que 100 la respuesta de Matux genera un error.

Ejemplo si VIDA = 70

VIDA = VIDA- (VIDA - 100)
VIDA = 70 - (70 - 100)
VIDA = 70 + 30
VIDA = 100

Lo que hace este codigo es que siempre tengas 100 de vida.
Es m?s se puede demostrar matematicamente:

VIDA = VIDA - (VIDA - 100)
VIDA = VIDA - VIDA + 100
VIDA = (VIDA - VIDA) + 100
VIDA = 0 + 100
VIDA = 100


_____________________________________________________________________________

Lo mejor es:

[gml]health = min(health,100)[/gml]

Saludos!