GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por lovn7 Qui 21 Nov 2024, 13:33

» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31

» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23

» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49

» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58

» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36

» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36

» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33

» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51

» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28

» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18

» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08

» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10

» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16

» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40

» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01

» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45

» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34

» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28

» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48

» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54

» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14

» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50


[Script] + Engine terreno destruivel

Ir para baixo

[Script] + Engine terreno destruivel Empty [Script] + Engine terreno destruivel

Mensagem por Android Project Dom 29 Set 2013, 21:13

Descrição:Scripts para jogos com terreno destrutivel.

Bem,a engine é do famoso joguinho worms,e o link para download esta aqui:
NOTE:GAME MAKER STUDIO
https://dl.dropboxusercontent.com/s/pa95tvo6ro0lef1/wormsCP.gmz?token_hash=AAGdf42XBzphh6Kkr0wddzfubV7YqmSPiMsk45xZv4bkxw&dl=1

Os scripts passarei aqui:

Primeiramente vamos criar o script "init_terrain",e adicionar isso a ele:
Código:

global.st=argument0
capx=0
capy=0
capxmax=room_width/global.st
capymax=room_height/global.st
global.surf=surface_create(capxmax*global.st,capymax*global.st)
surface_set_target(global.surf)
draw_clear_alpha(c_black,0)
for (i=0;i<10000;i+=1)
{
    if instance_number(drw)>0
    {
        pet=instance_nearest(x,y,drw)
        draw_sprite_ext(pet.sprite_index,pet.image_index,pet.x,pet.y,pet.image_xscale,pet.image_yscale,pet.image_angle,c_white,pet.image_alpha)
        with pet
        instance_destroy()
    }
    else
    i=10000
}
surface_reset_target()
instance_deactivate_all(1)
O script init_terrain preparara o terreno graficamente.
Agora crie o script "generate_terrain_col" e adicione isso a ele:
Código:

repeat 100
if capy<capymax
{
    cor=surface_getpixel(global.surf,capx*global.st,capy*global.st)
    global.terreno[capx,capy]=false
    if color_get_red(cor)>0 or color_get_green(cor)>0 or color_get_blue(cor)>0
    global.terreno[capx,capy]=true
    capx+=1
    if capx>capxmax
    {capx=0
    capy+=1}
}
else
{
     instance_activate_all()
     instance_destroy()
}
draw_set_color(c_black)
draw_set_alpha(1)
draw_rectangle(view_xview[0],view_yview[0],view_xview[0]+window_get_width(),view_yview[0]+window_get_height(),0)
draw_set_color(c_white)
Este script ira gerar a area de colisão do terreno.
Agora adicione o script "col_sc" e adicione isto a ele:
Código:

sc=0
for (i=0;i<10000;i+=1)
{
    if global.terreno[((x+hspeed)/global.st),((y+vspeed)/global.st)+argument2]
    {
        y-=1
        if argument6
        vspeed=-(abs(vspeed))
        sc=1
    }
    else
    i=10000
}
for (i=0;i<10000;i+=1)
{
    if global.terreno[((x+hspeed)/global.st)+argument0,((y+vspeed)/global.st)+argument4]
    {
        x+=1
        if argument5
        hspeed=abs(hspeed)
        sc=1
    }
    else
    i=10000
}
for (i=0;i<10000;i+=1)
{
    if global.terreno[((x+hspeed)/global.st)+argument1,((y+vspeed)/global.st)+argument4]
    {
        x-=1
        if argument5
        hspeed=-(abs(hspeed))
        sc=1
    }
    else
    i=10000
}
for (i=0;i<10000;i+=1)
{
    if global.terreno[((x+hspeed)/global.st),((y+vspeed)/global.st)+argument3]
    {
        y+=1
        if argument6
        vspeed=abs(vspeed)
        sc=1
    }
    else
    i=10000
}
return sc
Este script servirá para checar uma colisão com o terreno.
Agora o ultimo script chamado "delten":
Código:

surface_set_target(global.surf)
draw_set_color(make_color_rgb(0,0,0))
draw_circle(argument0,argument1,argument2,0)
var capxmax,capx,capy,capymay,cor,capstarx
capstarx=(argument0/global.st)-(argument2/global.st)
if capstarx<0 capstarx=0
capstary=(argument1/global.st)-(argument2/global.st)
if capstary<0 capstary=0
capxmax=(argument0/global.st)+(argument2/global.st)
if capxmax>room_width capxmax=room_width
capymay=(argument1/global.st)+(argument2/global.st)
if capymay>room_height capymay=room_height
capy=capstary
for(capx=capstarx;capy<capymay;capx+=1)
{
    cor=surface_getpixel(global.surf,capx*global.st,capy*global.st)
    if color_get_red(cor)=0
    if color_get_green(cor)=0
    if color_get_blue(cor)=0
    global.terreno[capx,capy]=false
    if capx>capxmax
    {capx=capstarx
    capy+=1}
}
draw_set_blend_mode(bm_subtract)
draw_circle(argument0,argument1,argument2,0)
draw_set_blend_mode(bm_normal)
surface_reset_target()
Este script serve para fazer o efeito explosao do worms.

Os argumentos dos script:

-init terrain(tamanho das particulas de colisão)
Quanto maior o tamanho das particulas,maior a velocidade para o computador gerar o terreno e deleta-lo.
Recomendo de 3 a 5.

-generate_terrain_col()
Este fara a area de colisão,não ha argumentos.

-col_sc(tamanho x,tamanho x2,tamanho y,tamanho y2,metade do tamanho y,rebate horizontal,rebate vertical)
Esse rebate vertical e rebate horizontal é para se você quer que eles rebatam quando colidirem no terreno ou se quer que fiquem parados(true ou false).
ATENÇÂO,é tamanho nos argumentos,não posição.

-delten(x,y,tamanho)
Local que sera destuido o terreno e o tamanho da destruição.

Para montar:
Crie um objeto chamado "terrain" e no creat dele coloque:
Código:

init terrain(tamanho das particulas de colisão)
E no draw coloque:
Código:

generate_terrain_col()
Você podera tambem por no draw para escrever uma mensagem de "carregando" apos o "generate_terrain_col",pois o processso de gerar a colisão do terreno é meio longo...

Crie um objeto chamado drw.
Os objetos que serão o terreno destrutivel do jogo você poe como parent o objeto drw.

No "destroy event" do objeto "terrain" coloque:
Código:

instance_create(0,0,surdrw)
E crie um objeto com o nome surdrw
e coloque no draw:
Código:

draw_surface(global.surf,0,0)
Pronto \o/
Você pode checar tambem com o script "col_sc" se houve colisão.
Por exemplo:
Código:

if col_sc(-1,1,1,-1,0,0,0)
instance_destroy()
Assim quando tal objeto colidir com o terreno se destruira.

FLW haha computador
Android Project
Android Project

Games Ranking : Nota C

Notas recebidas : D+C+C
Data de inscrição : 20/08/2013
Reputação : 1
Número de Mensagens : 77
Prêmios : [Script] + Engine terreno destruivel Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos