Noticias

¡Ayuda a la Comunidad GM, haz una donación!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: ayuda, no puedo hacer girar bien un abanico  (Leído 600 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado GaryVega

en: Diciembre 20, 2020, 04:48:26 am
tengo problemas cuando uso el script approach con el image angle para hacer rotar un abanico, quiero que el aspa gire lento hasta alcanzar su velocidad limite, ya intente muchas cosas y no entiendo que pasa, también es la primera vez que intento manipular el image angle
dejo mi código aquí:

[create]
angle=0
fan_power=0;
fan_power_min = 0;
fan_power_max = 10;

aceleracion=1
friccion=1

global.fan_on=false

[DRAW]
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,angle,c_white,1)

draw_text(x,y,string(angle))

[STEP]
 
if (global.fan_on=true) and (alarm[0]==-1) {alarm[0]=room_speed/2}
if (global.fan_on=false) alarm[0]=-1


if (global.fan_on=true)
{
   angle=fan_power
   fan_power+=scr_approach(fan_power_min,fan_power_max,aceleracion)
}
else {fan_power = 0}

[ALARM 0]
global.spins_number++

instance_create_depth(x,y,depth-999,obj_auto_guardar)

 
Los siguientes usuarios dieron las gracias a este tema: dixon


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado 3dgeminis

Respuesta #1 en: Diciembre 21, 2020, 12:14:48 am
Cual es el problema? no gira, gira sin cambiar de velocidad, solo gira lento o a maxima velocidad? Que hace el  script approach, que codigo usa?

 
Los siguientes usuarios dieron las gracias a este tema: dixon, GaryVega


Desconectado dixon

Respuesta #2 en: Diciembre 21, 2020, 04:03:38 am
Hola, saludos cordiales.



Saludos 3dgeminis, discúlpeme por interrumpir, perdóname esta.  :-[ , le dejo la version html5 que puede ejecutar desde aquí, para que vea el resultado directamente.

https://ndika3y7yuiuyd81pfplkq-on.drv.tw/www.dixonweb.dx/games/ventilador_html5/


Ahora continuamos con el post





¿Tienes un problema con tu ventilador (abanico)?, no te preocupes, hoy estas de suerte, afortunadamente me dedico a la reparación de computadoras, ventiladores y lavadoras (no automáticas) y en mis tiempos libres programo en game maker. Para continuar, tendremos presente que se le llamará “ventilador” al abanico, porque así lo llamamos en Venezuela.





Viendo bien el código de tu ventilador, “no me gusta su aspecto”, al parecer le ha entrado polvo, hay que hacerle mantenimiento, comprarle los rodamientos (bocinas, rolines) nuevos, y echarle buena grasa, pero para eso hay que destaparlo por completo, es por eso que la mano de obra (mi trabajo técnico) te sale más o menos (te cuesta aproximadamente, te costará alrededor de, tendrá un precio aproximado de) 10 dólares americanos incluyendo el costo de los repuestos (refacciones). XD.
La global.fan_on es el interruptor de encendido. Debería llamarse global.fan_ switch, ya que es incorrecto llamar a los interruptores de corriente “apagadores o encendedores”, su nombre técnico es “interruptores” porque interrumpen el paso de la corriente eléctrica. Ahora bien, en el script que presentas no me indicaste la función que enciende al ventilador, es decir: me entregastes un ventilador sin el interruptor. Pero no te preocupes porque aunque lo encendí en el evento CREATE me di cuenta que no arrancaba, luego se recalentó (aumentó su temperatura, se puso caliente) y comenzó a echar mucho humo, entonces lo apagué antes de que se terminara de dañar.





La variable global.spins_number, no está haciendo absolutamente nada, es un cable que está demás, no tengo idea porque el técnico anterior lo dejó hay, pero no te preocupes que tengo fé de que te lo voy a reparar, he trabajado con ventiladores en condiciones más desfavorables.

El script approach representa el capacitor (condensador o filtro) el cual le da el primer impulso de corriente al embobinado produciendo un fuerte campo magnético. No he trabajado con ese modelo de script que me presenta, pero estuve investigando bastante y descubrí que es correcto usar este tipo de script para acelerar ventiladores, entre otras cosas. Es decir tu script está bueno.

Estuve trabajando por aproximadamente 3 horas para hallarle la solución a tu ventilador (abanico) y logré repararlo.
Descubrí que estabas usando el script approach de manera incorrecta, así es como debe usarse:
Este es el script:
scr_approach(variable a sumar, valor maximo, aceleracion)

El primer argumento (el argumento0), llamado “variable a sumar”, es la variable que va a cambiar de valor o que va a ser incrementada, no es una variable fija, el segundo argumento (valor máximo), es el valor máximo que tendrá  la variable del primer argumento, y el tercer argumento es la velocidad o el factor de aceleración que tendrá la variable, en otras palabras será el valor que se le sumará variable por cada paso o step. Es un poco confuso entender todo esto, pero con la práctica se domina el tema.

El ángulo también presentaba problemas, ya que no estaba recibiendo correctamente el valor solicitado.
Esto fue lo que hice:

1.   Modifiqué el script, permitiendo que el ventilador girara, y que su inicio fuera acelerado como los ventiladores reales.
2.   Agregué un evento del teclado para apagar y encender el ventilador el presionar ENTER.
3.   Agregué otro pequeño script, para que el ángulo se mantenga dentro de los 360 grados y no salga de ahí.
4.   Anexé otro pequeño script approach para la disminución del giro a la hora de apagar el ventilador (abanico), para que también se disminuyera su aceleración al apagar.
5.   Agregué un pequeño código muy útil, el cual permite visualizar fácilmente el estado de las variables cuando está en ejecución, lo he llamado draw_text_super2.  Este código es necesario para todos los programadores del game maquer, ya que facilita en gran manera el desarrollo al permitir visualizar las variables de la manera más rápida y cómoda que estar usando la variable draw_text por cada variable.

El script quedó de la siguiente manera:
//[create]
angle=0
fan_power=0;
fan_power_min = 0;
fan_power_max = 10;

aceleracion=1
friccion=1

global.fan_on=false;

//variable de texto
zzz=""

///[Alar0]
global.spins_number+=1;

//instance_create_depth(x,y,depth-999,obj_auto_guardar)


//[STEP]
 
if (global.fan_on=true) and (alarm[0]==-1) {alarm[0]=room_speed/2}
if (global.fan_on=false) alarm[0]=-1


if (global.fan_on=true)
{
   angle=angle+fan_power
   fan_power=scr_approach(fan_power,fan_power_max,aceleracion)
}
else
{
    angle=angle+fan_power
   fan_power=scr_approach(fan_power,0,aceleracion)
}

//Para mantener el ángulo dentro de los 60 grados
if(angle>360){angle=angle-360}
if(angle<0){angle=angle+360}



//[DRAW]
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,angle,c_white,1)

draw_text(x,y,string(angle))


////texto para visualizar variables
dx=0;
dy=0;
fuente_size=20;
fuente_espacio=fuente_size+fuente_size/2;

draw_text(dx,dy,"global.fan_on: "+string(global.fan_on));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"fan_power: "+string(fan_power));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"angle: "+string(angle));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}
draw_text(dx,dy,"zzz: "+string(zzz));dy+=fuente_espacio;if(dy>room_height-fuente_espacio){dy=0;dx+=room_width/2}



///EVENTO PRESS <ENTER>
//Para encender y apagar el ventilador.

if(global.fan_on=true)
{
global.fan_on=false;
}
else
{
global.fan_on=true;
}


 


Realmente no estoy cobrando, pero si usted cree que sería conveniente darme una donación, se la aceptaré con gusto, pero si no puede no importa, seguiremos siendo amigos. XD  8). Aqui le dejo el gmz para game maker studio 1.4 el cual puede ser importado a game maker studio 2.

https://drive.google.com/u/0/uc?id=1w1tjGL7H2cj4_5-apYhGCX2rSFrIYGZK&export=download



 

Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.
 
Los siguientes usuarios dieron las gracias a este tema: GaryVega


Desconectado GaryVega

Respuesta #3 en: Diciembre 21, 2020, 11:00:52 pm
WOOOOW, Solucionado al 100%
amigo en serio que que bonita manera de contestar un post, me ayudaste bastante y el codigo que usas para verificar las variables esta genial
amigo ayudaste, informaste, divertiste todo junto en una respuesta, men eres un crack.  ;D

MUCHISIMAS GRACIAS !!  :)  :)

 
Los siguientes usuarios dieron las gracias a este tema: dixon