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

1
Ya encontre una manera a lo que pides... no es optima si al final van a haber muchos objetos B, pero funciona.
en este caso ya no se requiere ningun codigo en el objeto B

evento create del objeto A:
[gml]
Total=0;//total de objetos B con los que se colisiono (dejar en 0)
Colisionados[0]=0;//dejamos el primer index en 0 para que no dee error al verificar el array por primera vez.
Variable=0;//esta variable la cambias por lo que quieras
[/gml]

evento de colision del objeto A contra el objeto B

[gml]
for (i = 0; i <= Total; i+=1){//bucle para revisar las colisiones que se efectuaron hasta ahora
if (Colisionados == other.id) exit; //si ya colisiono con ese objeto B nos salimos del evento colision
if (i = Total){ // si llegamos al final del bucle y no hubo una colision con ese objeto hacemos lo siguiente:
Total+=1;
Colisionados[Total] = other.id;
Variable+=1;}
}
[/gml]

Espero que se entienda, Suerte!

Editado: se que es mas optimo hacer esto mismo pero con ds_map o ds_list, el problema es que no se usarlos bien xD si tu o un user del foro lo adapta para que use listas, va a ser mucho mas optimo si estamos hablando de cientos de objetos.

2
Se me ocurre algo asi.
en el evento create del objeto B puedes poner algo como
Tocado = false;

le creas un evento de colision al objeto B cuando toca el objeto A.
el codigo de colision seria algo como esto:


if Tocado = false {
other.Variable+=1;}

Tocado = true;


Espero que te sirva


Editado: si vas a tener muchos objetos B creo que seria mas optimo que solo el objeto A verifique las colisiones. asi que te dejo esta segunda opcion:
el evento create del objeto B sigue igual, pero no le creas un evento de colision.
en cambio en el objeto A creas un evento de colision para cuando toca el objeto B y le pones este codigo:


if other.Tocado=false {
Variable+=1;
other.Tocado=true;
}


3
Bueno, al final pude resolver mi problema :)
buscando en foros encontraba algunas funciones para hacerlo, pero estaban en otro lenguaje de programacion y no las comprendia del todo.
hasta que en un foro un usuario dijo que un short es solo el resultado de la multiplicacion de 2 bytes. entonces teniendo en cuenta eso me puse a pensar un poco y desarolle estos 2 scripts:

Writeushort

writebyte(argument0 div 256);//divide el numero sin darnos resultado decimal
writebyte(argument0 mod 256);//obtiene el resto de la division


Y Readushort

var1 = readbyte();
var2 = readbyte();
//esto es porque si los bytes superan el valor de 127 se vuelven negativos...
//por ahora no necesito numeros negativos en mi juego
if var1<0{var1+=256}
if var2<0{var2+=256}

return ((var1*256)+var2);//se multiplica la primera variable por 256 y se le suma el resto


(el server simplemente reenvía los bytes tal cual llegan)
Al final era mucho mas sencillo de lo que me esperaba :) ojala le sirva a alguien mas que a mi.

Saludos.
4
Estoy haciendo un juego en game maker con 39dll. no es la primera vez que hago uno... pero esta vez quiero que todo sea mas profesional. por lo tanto compre un vps con linux... gran decepcion me lleve al ver que no puedo ejecutar un server hecho en game maker en un vps ni siquiera con Wine xD.

Por lo tanto estoy haciendo mi server en Java. con una libreria que simula el funcionamiento de la 39dll. hasta ahora me funcionaba muy bien, puedo enviar bytes y strings sin problemas y funciona muy bien. Pero el problema esta en que el server java no puede recibir variables del tipo short o int. las recibe muy mal... le da un valor que no es el correcto.
intente comunicarme con el creador de la libreria pero no hay suerte por ahora.

Entonces se me ocurrio esto: ya que supuestamente una variable del tipo short equivalen a 2 bytes... ¿por que no enviar 2 bytes en vez de 1 short? esto en teoria funcionaria bien. el problema es que no se convertir una variable short en 2 bytes. aqui es donde les pido su ayuda.

¿Como hago para convertir 2 bytes a short y viceversa? Esto va a ser del lado del juego de game maker, por lo tanto tiene que ser en gml. me salvarían el juego si alguien supiera!

Gracias.