[Tutorial] Chamar eventos em GML

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Tutorial] Chamar eventos em GML

Mensagem por Prometo_ser_fiel em Seg 12 Maio 2014, 11:46

Título: Chamar eventos em GML
Versão do GM: GM8 ou superior
Dificuldade: Intermediário
Requer Extensões: não
Requer DLLs: não
Tags: GML, eventos


Oi pessoal, eu tenho um dica de como colocar eventos por GML, e nesse exemplo sem precisar de mexer no Menu Event dos objetos.
Isso poderá ser muito útil pra vocês...

Preste Atenção:
Crie um objeto qualquer, será "object0".
Crie uma room vazia (room0) e coloque o objeto na room
No menu settings da room, clique em "Creation Code" para inserir o código GML e digite:

Código:
object_event_add(object0,ev_draw,0,"
draw_text(16,16,fps)
draw_text(128,16,room_speed)
");
//adiciona o Event no Object, Desenha o FPS do jogo, Desenha a room_speed

Agora é só executar...

Entendendo:
Note que o "object0" estava vazio e sem nada, e através do Creation Code da Room inserimos um Event no objeto.
Isso também pode ser usado para fazer com que um objeto insira um Event em outro  blz 
Significa que você pode definir vários eventos através de um Event Create.

Isto é o básico para você aprender a colocar objetos externos no Game Maker sem muito esforço, e/ou também poderão criar funções bem complexas, etc...

Vocês podem usar o todos os eventos que quiserem, abaixo uma lista dos eventos em forma de Constants.

Constantes:

ev_alarm
ev_animation_end
ev_boundary
ev_close_button
ev_collision
ev_create
ev_destroy
ev_draw
ev_end_of_path
ev_game_end
ev_game_start
ev_global_left_button
ev_global_left_press
ev_global_left_release
ev_global_middle_button
ev_global_middle_press
ev_global_middle_release
ev_global_press
ev_global_release
ev_global_right_button
ev_global_right_press
ev_global_right_release
ev_joystick1_button1
ev_joystick1_button2
ev_joystick1_button3
ev_joystick1_button4
ev_joystick1_button5
ev_joystick1_button6
ev_joystick1_button7
ev_joystick1_button8
ev_joystick1_down
ev_joystick1_left
ev_joystick1_right
ev_joystick1_up
ev_joystick2_button1
ev_joystick2_button2
ev_joystick2_button3
ev_joystick2_button4
ev_joystick2_button5
ev_joystick2_button6
ev_joystick2_button7
ev_joystick2_button8
ev_joystick2_down
ev_joystick2_left
ev_joystick2_right
ev_joystick2_up
ev_keyboard
ev_keypress
ev_keyrelease
ev_left_button
ev_left_press
ev_left_release
ev_middle_button
ev_middle_press
ev_middle_release
ev_mouse
ev_mouse_enter
ev_mouse_leave
ev_mouse_wheel_down
ev_mouse_wheel_up
ev_no_button
ev_no_more_health
ev_no_more_lives
ev_other
ev_outside
ev_right_button
ev_right_press
ev_right_release
ev_room_end
ev_room_start
ev_step
ev_step_begin
ev_step_end
ev_step_normal
ev_trigger
ev_user0
ev_user1
ev_user10
ev_user11
ev_user12
ev_user13
ev_user14
ev_user15
ev_user2
ev_user3
ev_user4
ev_user5
ev_user6
ev_user7
ev_user8
ev_user9

Consulte no Help do GM sobre Eventos na Documentação do GM em Português para mais informações.

Obrigado!!!


Última edição por Dr.Harrison em Seg 12 Maio 2014, 22:12, editado 5 vez(es) (Razão : mudei o título para [Tutorial])

Prometo_ser_fiel

Número de Mensagens : 6
Data de inscrição : 11/05/2014
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Chamar eventos em GML

Mensagem por polosam em Seg 12 Maio 2014, 14:19

Não entendo muito, mas parece que você está performando o create event da room como draw, não? Vamos ver o que o pessoal pode fazer com esse conhecimento, que ao menos para mim é totalmente novo.
 flw

polosam

Número de Mensagens : 424
Idade : 24
Data de inscrição : 20/12/2010
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Chamar eventos em GML

Mensagem por Prometo_ser_fiel em Seg 12 Maio 2014, 14:27

polosam escreveu:Não entendo muito, mas parece que você está performando o create event da room como draw, não? Vamos ver o que o pessoal pode fazer com esse conhecimento, que ao menos para mim é totalmente novo.
 flw
Sim, voce pode colocar step no create também, assim:

object_event_add(object0,ev_step,ev_step_normal,"image_angle+=2");


//faz imagem ficar girando


voce pode colocar o evento destroy no create também, assim:




object_event_add(object0,ev_destroy,0,"game_end()");

//quando o objeto for destruido game end

Prometo_ser_fiel

Número de Mensagens : 6
Data de inscrição : 11/05/2014
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Chamar eventos em GML

Mensagem por polosam em Seg 12 Maio 2014, 14:33

Resumindo: no drag'n'drop basta pegar um único evento, ok?  coll2

polosam

Número de Mensagens : 424
Idade : 24
Data de inscrição : 20/12/2010
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Chamar eventos em GML

Mensagem por Tedi Ripper em Seg 12 Maio 2014, 16:11

Esse é um sistema muito util, o Saim explicou bem em seu tutorial de Game Generico, da pra fazer um tipo de criador de jogos com isso, ou então, só um jogo mais profissional, usando basicamente só arquivos externos, tipo um .jar ou sei la haha

Legal por explicar isso, mas exemplifica mais os eventos e talz...
Mostra porque funciona!
Flw

Tedi Ripper

Ranking : Nota C
Número de Mensagens : 765
Idade : 19
Data de inscrição : 21/11/2010
Notas recebidas : C
Reputação : 24
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Tutorial] Chamar eventos em GML

Mensagem por Vikintor em Seg 12 Maio 2014, 22:23

Esta é uma das funções que mais senti falta no Game maker Studio (e uma das minhas favoritas também). Com ela era possível organizar muito bem o projeto. 
É legal trazer para a galera esta função que considero obscura (pouco conhecida) e trazer ao conhecimento geral para um estudo mais amplo. Dá realmente para fazer muita coisa só por códigos, e considero o uso destas funções ótimas para a questão de estudo e desenvolvimento de pequenos softwares em geral, mas não aconselho para produção de jogos completos.
Se tiver interesse, tenho esse jogo que fiz á algum tempo utilizando esta função (obs: É apenas script, não é necessário baixar);
Script:


Para usar basta criar um novo jogo, vá até Creation code em Settings (nas opções da room ) e cole este código. Depois basta dar F5 e testar (não é necessário o uso de objetos, apenas uma room).
Código:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*Script by Vikintor. É autorizada a distribuição desse script, sem necessidade do nome do autor.

Game Maker Copyright
Game Maker © by Mark Overmars (http://www.gamemaker.nl).
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Cria o sprite para colisões
global.sprite_c = sprite_create_from_screen(0,0,32,32,0,0,0,0)
//sprite_set_bbox_mode(global.sprite_c,2)
//sprite_set_precise(global.sprite_c,0)
//ESPECIFICAÇÕES
global.pontos_m = 'PONTOS'
global.titulo = 'JOGUINHO NERVOSO'
global.cor_titulo = c_lime
room_caption = 'Menu' //Aparece como nome da janela
show_score = false //Desabilita pontuação na borda da janela
background_color = c_navy // Cor de fundo
// draw_set_font(font0) //Fonte do texto

//NOME DAS OPÇÕES
global.b_new_game = 'NOVO JOGO'
global.b_ranking = 'RANKING'
global.b_help = 'AJUDA'
global.b_quit = 'SAIR'
//Posição do texto do menu
global.texto_posicao = 320 //Posição x onde o menu surgira
global.texto_posicaov = 240 //Posição Y onde o menu surgira
global.tamanhox = 2 //tamanho horizontal do texto
global.tamanhoy =2 //tamanho vertical do texto
global.tamanho_caixa = 100 //largura da caixa que fica atraz do texto
global.tamanho_caixav = 70 //tamanho da caixa que fica atraz do texto

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Cria o menu
global.player_0 = object_add()
object_event_add(global.player_0,ev_create,0,'
global.var_menu = 0 //Estado inicial do menu
global.var_menu_max = 3 //Numero maximo de opções do menu
global.cor_menu = c_white //cor do menu
global.cor_menu_sel = c_green //cor do menu selecionado
')
object_event_add(global.player_0,ev_step,0,'
if keyboard_check_pressed(vk_down) = true //Se a tecla BAIXO for pressionada
{
if global.var_menu < global.var_menu_max //Se o cursor esta antes do fim do menu
{
global.var_menu += 1 //Muda o numero da imagem
//sound_play(sound_cursor) //Toca som
}
else //ou
{
//Código caso o menu esteja em numero incorréto
global.var_menu = global.var_menu_max
//sound_play(sound_error)
}
}
if keyboard_check_pressed(vk_up) = true //Se a tecla ACIMA for pressionada
{
if global.var_menu > 0
{
global.var_menu -= 1
//sound_play(sound_cursor)
}
else
{
global.var_menu = 0
//sound_play(sound_error)
}
}
////////////////////////////// EVENTOS /////////////////////////////
if keyboard_check_pressed(vk_space) = true or keyboard_check_pressed(vk_enter) = true //Se a tecla SPACE ou ENTER for pressionada
{
if global.var_menu = 0
{
//Cria a bolinha que você controla
global.player_1 = object_add()
object_set_sprite(global.player_1,global.sprite_c) http://global.sprite_c é o sprite da bolinha (somente para colisão)
object_event_add(global.player_1,ev_step,0,"
sprite_get_bbox_top(global.player_1= 4)
sprite_get_bbox_left(global.player_1=  4)
sprite_get_bbox_right(global.player_1=  28)
sprite_get_bbox_bottom(global.player_1=  28)
")
//Cria os controles da bolinha
object_event_add(global.player_1,ev_step,0,"if keyboard_check(vk_up) = true  then if y > 30 then y-=6")
object_event_add(global.player_1,ev_step,0,"if keyboard_check(vk_down) = true  then if y < 380 then y+=6")
object_event_add(global.player_1,ev_step,0,"if keyboard_check(vk_left) = true  then if x > 10 then x-=6")
object_event_add(global.player_1,ev_step,0,"if keyboard_check(vk_right) = true  then if x < 600 then x+=6")
//Cria os blocos inimigos
global.evento = object_add()
global.posicao = choose(10,25,15,14,20,16,13,11,12,9,8)//Velocidade dos blocos inimigos
object_set_sprite(global.evento,global.sprite_c)
object_event_add(global.evento,ev_step,0,"sprite_get_bbox_top(global.evento=  4) sprite_get_bbox_left(global.evento=  4) sprite_get_bbox_right(global.evento=  28) sprite_get_bbox_bottom(global.evento=  26)")
object_event_add(global.evento,ev_create,0,"global.posicao = choose(10,16,13,11,12,9,8,11,10) vspeed = global.posicao hspeed = 0")
object_event_add(global.evento,ev_animation_end,0,"instance_create(random(640),0,global.evento) instance_destroy()")
instance_create(random(640),500,global.evento)
//Mostra a bolinha
object_event_add(global.player_1,ev_draw,0,"draw_set_color(c_blue) draw_ellipse_color(x-16,y-16,x+16,y+16,c_blue,c_fuchsia,0) draw_set_color(c_black)")
//Mostra os blocos inimigos
object_event_add(global.evento,ev_draw,0,"draw_rectangle_color(x-16,y-16,x+16,y+16,c_black,c_dkgray,c_silver,c_red,0)")
//Cria o objeto principal
global.evento2 = object_add()
object_event_add(global.evento2,ev_create,0,"depth = -10 alarm[0] = 100")
object_event_add(global.evento2,ev_step,0,"score += 1")
object_event_add(global.evento2,ev_alarm,0,"instance_create(random(640),500,global.evento) alarm[0] = 100")
instance_create(1,400,global.evento2)
//Mostra a pontuação na tela
object_event_add(global.evento2,ev_draw,0,"draw_set_color(c_dkgray) draw_rectangle(0,400,640,480,0) image_alpha = 0.6 draw_set_color(c_black) draw_rectangle(100,400,500,460,0) image_alpha = 1")
object_event_add(global.evento2,ev_draw,0,"draw_set_color(c_blue)draw_set_color(c_white)draw_text_transformed(270,400,score,2,2,0)")
//Cria um objeto para mostrar a chuva
global.evento3 = object_add()
object_event_add(global.evento3,ev_draw,0,"effect_create_below(ef_rain ,x,y,2,c_white)")
object_event_add(global.evento3,ev_create,0,"depth = 10")
instance_create(1,400,global.evento3)
//colisao da bola com o quadrado
object_event_add(global.player_1,ev_collision,global.evento,"highscore_show(score) game_restart()")
room_caption = "Desvie dos quadrados"
show_score = false
background_color = c_maroon

instance_create(320,272,global.player_1)
instance_deactivate_object(global.player_0)
}
if global.var_menu = 1 then highscore_show(0)
if global.var_menu = 2 then show_message("Use as teclas para controlar a bola e fazer elas desviarem dos blocos.Tente alcançar uma boa pontuação.")
if global.var_menu = 3 then game_end()
//sound_play(sound_decision)
}
')
object_event_add(global.player_0,ev_draw,0,"draw_set_halign(fa_center) draw_set_color(global.cor_titulo) draw_text_transformed(320,100,global.titulo,3,2,0) draw_rectangle_color(global.texto_posicao-global.tamanho_caixa,global.texto_posicaov-global.tamanho_caixav,global.texto_posicao+global.tamanho_caixa,global.texto_posicaov+global.tamanho_caixav,c_black,c_dkgray,c_silver,c_red,0) draw_set_color(c_white) draw_text(320,410,'Victor Follador 2010')")
object_event_add(global.player_0,ev_draw,0,"
draw_set_halign(fa_center) // alinha a fonte para o meio
if global.var_menu = 0 then draw_set_color(global.cor_menu_sel) else draw_set_color(global.cor_menu) // Se opçao 0 esta selecionada
draw_text_transformed(global.texto_posicao,global.texto_posicaov-60,global.b_new_game,global.tamanhox,global.tamanhoy,0)
if global.var_menu = 1 then draw_set_color(global.cor_menu_sel) else draw_set_color(global.cor_menu)
draw_text_transformed(global.texto_posicao,global.texto_posicaov-30,global.b_ranking,global.tamanhox,global.tamanhoy,0)
if global.var_menu = 2 then draw_set_color(global.cor_menu_sel) else draw_set_color(global.cor_menu)
draw_text_transformed(global.texto_posicao,global.texto_posicaov+0,global.b_help,global.tamanhox,global.tamanhoy,0)
if global.var_menu = 3 then draw_set_color(global.cor_menu_sel) else draw_set_color(global.cor_menu)
draw_text_transformed(global.texto_posicao,global.texto_posicaov+30,global.b_quit,global.tamanhox,global.tamanhoy,0)
draw_set_halign(fa_left)")
instance_create(320,240,global.player_0)

Não é necessário dar créditos se for utilizar.

Vikintor

Ranking : Nota B
Número de Mensagens : 901
Idade : 26
Data de inscrição : 28/03/2010
Notas recebidas : B
Reputação : 17
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://vikintor.tumblr.com/

Voltar ao Topo Ir em baixo

Re: [Tutorial] Chamar eventos em GML

Mensagem por Conteúdo patrocinado Hoje à(s) 19:55


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum