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

211
Hola empardopo

Haz un contador e increméntalo en cada step, cuando mueras lo haces cero y listo.

Create event:
tiempo = 0

Step event:
tiempo += 1

Luego lo dibujas como quieras, en gigante, como sprites, etc.
Draw event
var auxiliar = tiempo div room_speed //recive los segundos totales transcurridos. Ej: 150 segundos (2min y 30seg)
var mins = auxiliar div 60 //recibe los minutos transcurridos, ej: 2
var segs = auxiliar mod 60 //recibe el saldo de los segundos (de 0 a 59). Ej: 30
draw_text(0,0,string(mins)+":"+string(segs))


Al morir recuerda hacer tiempo = 0 y listo.

Edit: corregí una función en la variable auxiliar, de mod a div

Saludos
212
Preguntas y respuestas / Re:String a Array
Agosto 28, 2018, 04:49:45 AM
Hola Edgamer63

Si tu array es de 1 dimensión, se me ocurre usar funciones de string y hacer un loop a lo largo de todo el array para encontrar cada número del array delimitado por la coma.

Un array tiene formato:
Citar{ { 0,1,2,3,4,5,6 },  }
Entonces tomaremos los dígitos del centro y buscaremos uno a uno cada valor.
Este es el código que uso para tomar valores de cadenas de texto delimitadas:

array[15]=0;
array_str = string(array);
var new_str = string_copy(array_str,5,string_pos("}",str)-6) //Esto toma el texto entre los primeros signos "{" y "}"
var aux_str = new_str //Crea una variable auxiliar que iremos reduciendo hasta llegar al último dígito
for (var i=0; i<string_count(",",new_str)+1; i+=1) { //Hace un loop por la cantidad de "comas" + 1
var pos = string_pos(",",aux_str); //Recive la posición de la primera coma
if pos = 0 new_array[i] = aux_str //Si ya no quedan más comas, es porque llegamos al último valor del array
else { //por el contrario, si aún quedan comas
new_array[i] = string_copy(aux_str,1,pos-1) //Al valor que sigue del array, le asigna todo lo que va antes de la primera coma y convierte ese dato en número.
aux_str = string_delete(aux_str,1,pos) //Elimina todo hasta la primera coma, dejando sólo los números restantes para poder iterar de nuevo
}
}


Ese código crea un nuevo array llamado "new_array" con los mismos valores del array original llamado "array", la diferencia es que todos los nuevos valores serán string. Los puedes convertir a dígito si usas la función "real" al momento de asignarle valor al nuevo array, sino arrojará errores cuando hagas sumas y ciertas operaciones numéricas.

Saludos
213
Hola Luis En

Porque es una extensión.
Las extensiones van en el apartado "extensiones", junto a los sprites, objetos, rooms y demás.
Das clic secundario en Extensiones > importar extensión y eliges el archivo GMEZ para incorporarlo a tu proyecto.

Saludos
214
Hola rogerskate

Que interesante la pregunta. Tienes alguna idea o alguna base para empezar? quizás alguna lógica pensada o algún código creado.
Será multijugador o contra un IA o cómo?

Saludos
215
Hola Luis En

Veo varios problemas en tu código.
El primero, es que le asignaste valor a x_destino en el evento CREATE, eso significa que las variables de destino no se actualizarán si mueves al personaje.
El otro problema es que el avance del personaje hacia las coordenadas de destino lo haces cuando pulsas "X". Por lo tanto, sólo se desplazará durante 1 step y no hará el recorrido completo (por eso has visto que el personaje se ha movido sólo un poco).

Le cambiaré un poco el orden al código que has colocado, con su respectivo comentario para que sepas qué hace cada línea.

En el CREATE EVENT no es necesario asignar valor a las variables, puedes simplemente crearlas con valor cero ya que el valor lo debe ganar relativo a la posición del player en el momento en que usa su poder.
x_destino = 0
y_destino = 0


En el STEP EVENT, cambiaré algunas cosas.
if (keyboard_check_pressed(ord("X"))) && global.jump_attack = false //Revisa si pulsas el botón X y el poder está desactivado
    {
    global.jump_attack = true //Activa el poder y establece las coordenadas de destino a 200 pixeles de distancia de las coordenadas actual del player.
    x_destino = x + image_xscale*200
    y_destino = y - 200
}

if global.jump_attack = true //Esto ocurre en cada step mientras el poder está activo.
{
gravity = 0 //Bloquea la gravedad para evitar que el personaje caiga mientras está usando su poder de salto
var dir = point_direction(x,y,x_destino,y_destino) //Calcula la distancia y dirección que hay hasta las coordenadas de destino
var dist = point_distance(x,y,x_destino,y_destino)
if dist < spd //Revisa si la distancia que debe recorrer es menor a la velocidad
{
x = x_destino; //Si eso pasa, teletransporta el personaje a su destino
y = y_destino;
global.jump_attack = false //Se acaba el poder
}
else //por el contrario, si aún le queda distancia que recorrer
{
  x += lengthdir_x(spd,dir) //Hace que el jugador avance un poco hacia su destino.
   y += lengthdir_y(spd,dir)
}
}
else //Si el poder está desactivado
{
gravity = 0.5 //Regresa la gravedad a su valor normal
}


Eso debería corregir tu problema. Coméntanos si aún estás teniendo problemas con el código.
Si aún sigues sin entender la lógica del código o alguna de las funciones, puedes mandarme un mensaje privado y te puedo explicar en detalle el efecto de cada una de las líneas

Saludos
216
Hola Luis En

Exacto, aunque la dirección no es necesario hacerla cero, lo normal es que sea 270.
Tambié tienes que reactivar la gravedad cuando finalices la habilidad
if jump_attack = true { gravity = 0 }
Else { gravity = tu valor de gravedad }


Si usas image_xscale con valores -1 y 1, basta con que multipliques la image_xscale para calcular la x de destino.
x_destino=x+image_xscale*200
Así tomará el valor 200 o -200 respecto a la x del jugador y te evitas crear dos veces el código

Saludos
217
Hola Luis En

Disculpa mi mediocre explicación.
x_destino e y_destino son variables que debes definir cuando pulsas la tecla de la habilidad especial.
En tu caso, si miras a la derecha sería:
x_destino=x+200
y_destino=y-200

Si miras a la izquierda:
x_destino=x-200
y_destino=y-200


Las funciones "lengthdir_x" y "lengthdir_y" de game maker te permiten obtener la componente horizontal y vertical de un vector, le debes dar una distancia y una dirección, es para evitar utilizar funciones trigonométricas que determinen cuantos pixeles avanzas en el eje X y cuantos en el eje Y.

Saludos
218
Preguntas y respuestas / Re:String a Array
Agosto 26, 2018, 06:59:06 PM
Hola Edgamer63

Explícanos cómo lo has convertido a string, quizás podamos hacer el proceso inverso.
Como nota adicional, por networking es más fácil enviar y leer un buffer. Piensa si te sirve mejor el uso de un buffer con los datos del array en vez de una string.
Como nota adicional 2, game maker tiene funciones para convertir ds_list a string y viceversa, quizás te sea más fácil usar una list en vez de un array

Saludos
219
Preguntas y respuestas / Re:sonido dentro de una view
Agosto 25, 2018, 08:59:12 PM
Hola Zorropa

Primero, como usaste la palabra "View" asumiré que NO estás usando GMS2 (ya que no existen las views) y te escribo un código para GMS1.4
Simplemente checkea antes de producir sonido, si el objeto está dentro de la VIEW o no.
Puedes usar la función "collision_rectangle" que devuelve el ID o noone, o puedes usar "rectangle_in_rectangle" que devuelve 0 si tu rectángulo no está dentro del área, 1 si está completamente dentro y 2 si sólo se superponen.

Para el siguiente ejemplo utilizo la segunda función, tomo la boundary box del sprite y reviso si está dentro de la VIEW.
if rectangle_in_rectangle(bbox_left, bbox_top, bbox_right, bbox_bottom, view_xview[0], view_yview[0], view_xview[0]+view_wview[0], view_yview[0]+view_hview[0]) != 0 {
audio_play_sound(tus argumentos) //Esto reproduce sonido si el objeto está parcial o completamente dentro de la view.
}


Saludos
220
 Hola

En realidad spd es para controlar la velocidad a la que llegas al destino, pero puedes simplemente colocar un número cualquiera en reemplazo

Saludos
221
Hola Luis En

Lamentablemente no funciona así...
Primero, la función "keyboard_check" se activa por cada step que mantienes pulsada la tecla, cuando uno pulsa y suelta una tecla, se activará el evento por al menos 5 steps, lo que manda a tu personaje a 200*5 = 1000 pixeles de distancia.
El evento correcto es "keyboard_check_pressed", eso hará que aunque mantengas apretado el botón, el código se ejecute sólo una vez.

Te recomiendo hacer los siguientes pasos:
1- Cuando pulsas S, Activa una variable llamada "salto" o "habilidad" o como quieras llamarle y activa 2 variables que indiquen la "x de destino" y la "y de destino".
2- Evita que el player se mueva libremente (incluso cancela la gravedad) si es que la variable "salto" o "habilidad" está activa.
3- El siguiente código moverá al player a la posición que indiques como destino a una velocidad "spd"
ojo: para que funcione debes haber definido antes las variables "spd, x_destino e y_destino" (tu las puedes llamar como quieras)
if salto = true { //o habilidad o como quieras
var dir = point_direction(x,y,x_destino,y_destino)
var dist = point_distance(x,y,x_destino,y_destino)
if dist < spd { x = x_destino; y = y_destino; salto = false } //desactiva la variable "salto" o "habilidad" o como la hayas llamado para que el player vuelva a moverse como lo haría normalmente
else {
x += lengthdir_x(spd,dir)
y += lengthdir_y(spd,dir)
}
}


Eso moverá al player en línea recta hacia las coordenadas de destino a una velocidad "spd".
Una vez que llegue a su destino, se desactiva la variable salto para que tu player se comporte de forma normal.

Saludos
222
Preguntas y respuestas / Re:ayuda con power ups
Agosto 24, 2018, 07:13:19 PM
Hola Sr.Mojon

Para eso es que pusimos la alarma, es la encargada de desactivar la bonificación, quizás la configuraste mal.

Cuando tocas la mejora, deberías tener incluido este código
alarm[0] = room_speed*6 //crea una alarma de 6 segundos

En el evento ALARMA 0 debes desactivar la variable
mejora_velocidad = false //O como quiera que le hayas puesto a la variable

Con ese código desactivas la variable de mejora, entonces tu STEP EVENT debe usar la velocidad normal en vez de la velocidad mejorada.

Saludos
223
Preguntas y respuestas / Re:ayuda con power ups
Agosto 24, 2018, 06:19:22 PM
Hola Sr.Mojon

Sí, ha sido error mio, la función alarma la escribí con paréntesis redondo y era el cuadrado
Usa:
alarm[0] = bla bla
Y debería funcionar (obviamente cambiando el "bla bla" por lo que realmente va jajaja).
Es que escribí el código desde mi celu sin probarlo antes, sorry

Saludos
224
Hola Jalealf

En la teoría, deberías usar un objeto control para dibujar todos los objetos con la profundidad que quieras.
Todos deben tener una variable en común, puede ser perfectamente una variable llamada "profundidad" que le de una prioridad de dibujo. NO uses "depth".
Luego tu objeto control se encarga de dibujar cada sprite según el órden de dibujo.

En este link en inglés se explica una técnica con grids bastante sencilla que podrías replicar
https://youtu.be/zrzTlidryxE

Saludos
225
Preguntas y respuestas / Re:ayuda con power ups
Agosto 24, 2018, 12:58:28 AM
Hola Sr.Mojon
Depende de tu script de movimiento.
Te explicaré como hacer que al tocar una mejora, dupliques tu velocidad durante 6 segundos. Tu debes adaptar el código a tus condiciones, a tus variables y a tus necesidades

Te recomiendo hacer lo siguiente:
En el create event, declarar una variable
mejora_velocidad = false

En el objeto player, evento de colusión con la mejora
mejora_velocidad = true //activa la variable "mejora_velocidad"
alarm(0) = room_speed*6 //crea una alarma de 6 segundos
with other instance_destroy() //destruye el objeto mejora


En el step event, debes incluir este código a tu script de movimiento
spd = 6 //la velocidad que sea que uses de forma normal
If mejora_velocidad = true {spd = 12} //la velocidad que quieras cuando hayas pillado la mejora

Sólo funcionará si tu script de movimiento usa una variable "spd" para moverte

En Alarm0 eliminas la bonificación de la mejora
mejora_velocidad = false

Saludos