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
» Servidor de Discord do fórum?
por Super Games Sáb 18 maio 2024, 01:27

» Problemas com a caixa de diálogo, ela é pequena e as letras não cabem dentro
por Rukasu777 Qui 16 maio 2024, 18:10

» Problemas com particulas
por RastaMaan Dom 12 maio 2024, 17:03

» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08

» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43

» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42


Códigos Úteis

+4
PedroX
Kapoty
luiz_eldorado
Kabeção
8 participantes

Ir para baixo

Códigos Úteis Empty Códigos Úteis

Mensagem por Kabeção Sáb 20 Out 2012, 13:18

Que tal uma discussão sobre códigos úteis?
Tipo aquele tópico que tinha na GMC mas já que nós falamos português vamos fazer o nosso.

Se você tiver algum para compartilhar ou algum método útil vamos discutir aqui e fazer exemplos.

Os scripts aqui são para utilização rápida e normalmente de conhecimento comum.
Poste-os sabem que poderam ser modificado para melhor compreensão/adaptação e na maioria dos casos sem mencionar créditos.


Vou começar com alguns que acho muito úteis e sempre uso:

Matemáticos

Formulas de acréscimo/decréscimo

Código:
// considerando que v começou como 10 esse código diminuirá o valor até 5 de forma suavizada
// 30 seria o fator de velocidade quanto menor mais rápido

v += (5-v)/30;

Código:
// Acréscimo/decréscimo estilo ping-pong
// ou seja, considerando que "sine" comesse como 0, vai acrescentar até chegar a 1, depois de 1 até 0
// útil para diversos efeitos do tipo flutuação, piscar e afins

sine += 0.075;
v = 0 + (sin(sine)+1)/2 * 1;

Código:
// Movimento linear
// start é a posição inicial, end a final
// Essa formula retornara a escala entre os dois número
// exemplo escala 0.5 entre 10 e 20 retornara 15

x = startx+(-cos(scale*pi)/2+0.5) *(endx-startx);
y = starty+(-cos(scale*pi)/2+0.5) *(endy-starty);

Diversos

Código:
// Método infame para controlar ciclos
// ao chegar ao limite "weapon_num" current_weapon retornara a 0
current_weapon = (current_weapon+1) mod weapon_num; // ciclos apenas para adição
current_weapon = ((current_weapon-1 mod weapon_num) + weapon_num) mod weapon_num; // ciclo para adição e subtração, ou chegar 0 se diminuir voltará a weapon_num-1

Práticas e afins
Código:
/*
No GMS existe um evento para desenhar sem distorções mesmo que o tamanho da view mude.
O Draw GUI.
Um sistema de zoom seria um exemplo, a HUD (informações para o jogador tais como pontos e vida) ficaria distorcida mas com esse evento o desenho não sofre alteração.
É possível fazer o mesmo em versões anteriores com o seguinte código
*/

d3d_set_projection_ortho(0,0,view_w_original,view_h_original,0);

// Use sempre no ultimo objeto a ser desenhado (o com menor depth)
// Tudo depois desse código será desenha com o tamanho definido que pode ser diferente do atual
// Com isso fica fácil evitar a distorção

Scripts

Código:
// view_control(obj_foco);
// Movimento de view até a posição do objeto foco

if instance_exists(argument0) {
    vx = argument0.x;
    vy = argument0.y;
    vx = min(view_xview+view_wview,max(0,vx-view_wview/2));  // difinir valores para centrar com o obj_foco
    vy = min(view_yview+view_hview,max(0,vy-view_hview/2));    // difinir valores para centrar com o obj_foco
} else {
    // caso não exista o obj_foco
    vx = view_xview;
    vy = view_yview;
}

// Caso em modo debug você pode mover a visão aperta o botão médio do mouse
if debug_mode {
    if mouse_check_button(mb_middle) {
        vx = mouse_x;
        vy = mouse_y;
        vx = min(view_xview+view_wview,max(0,vx-view_wview/2));
        vy = min(view_yview+view_hview,max(0,vy-view_hview/2));
    }
}

// Movimento suavizado até a posição vx, vy
view_xview += (vx-view_xview)/5;
view_yview += (vy-view_yview)/5;

Código:
// time_step(steps,fps);
// retorna string com tempo baseado em fps
// steps seria o numero de steps desde que o tempo começou, algo "step += 1;" no evento Step
// Pode ser usado para qualquer unidade de medição, por exemplo, em milisegundos:
// time_step(current_time-start_time,1000);

var str,s,m,h;
str = '';
s = floor((argument0/argument1) mod 60);
m = floor(((argument0/argument1)/60) mod 60);
h = floor((((argument0/argument1)/60)/60));
if h < 10 str += '0'+string(h);
else str += string(h);
str += ':';
if m < 10 str += '0'+string(m);
else str += string(m);
str += ':';
if s < 10 str += '0'+string(s);
else str += string(s);
return str;

Código:
// fundir_obj(obj,obj2,...)
// simplifica objetos retangulares comuns
// Por exemplo, você tem objeto quadrados invisíveis que servem para colisão
// Com esse scritp você fundi-los para menos objetos e assim aumentar performance

// Para funcionar os objeto precisam ter variáveis com o valor da do seu tamanho e serem identicos
// sw = sprite_width;
// sw = sprite_height;

// Uma boa prática é usar sempre no evento Room Start

var i;
for (i = 0; i < argument_count; i += 1) {
    if instance_exists(argument[i]) {
        with (argument[i]) {
            if collision_point(x,y,argument[i],0,1) instance_destroy();
        }
        with (argument[i]) {
            do {
                oi = instance_position(x+sw+1,y,argument[i]);
                if oi != noone {
                    if oi.y = y && oi.sh = sh {
                        sw += oi.sw;
                        with oi instance_destroy();
                    } else oi = noone;
                }
            } until oi = noone;
        }
        with (argument[i]) {
            do {
                oi = instance_position(x,y+sh+1,argument[i]);
                if oi != noone {
                    if oi.x = x && oi.sw = sw {
                        sh += oi.sh;
                        with oi instance_destroy();
                    } else oi = noone;
                }
            } until oi = noone;
        }
    }
   
    with(argument[i]) {
        image_xscale = (sw)/sprite_width;
        image_yscale = (sh)/sprite_height;
    }
}


Códigos Úteis Ex0

Códigos Úteis Ex1


Última edição por Kabeção em Dom 21 Out 2012, 11:43, editado 10 vez(es)
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : Códigos Úteis Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

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

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

Códigos Úteis Empty Re: Códigos Úteis

Mensagem por luiz_eldorado Sáb 20 Out 2012, 13:35

Legal xD
Alguns scripts que eu peguei do MatheusReis:

Ler uma linha de um arquivo aberto:
Código:
//rl(file,isreal);
var _;
_=file_text_read_string(argument0);
file_text_readln(argument0);
if argument1 _=real(_);
return _;
Escrever uma linha num arquivo aberto:
Código:
//wt(file,text)
file_text_write_string(argument0,string(argument1))
file_text_writeln(argument0)
Pega tudo que tem num arquivo (precisa do rl):
Código:
//gettext(file);
var _1,_2;
_1=file_text_open_read(argument0);
_2='';
while(!file_text_eof(_1)) {
_2+=rl(_1)+chr(13);
}
file_text_close(_1);
return _2;
luiz_eldorado
luiz_eldorado

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 30/07/2011
Reputação : 47
Número de Mensagens : 928
Prêmios : Códigos Úteis Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 1

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

http://luizpontes.tk/

Ir para o topo Ir para baixo

Códigos Úteis Empty Re: Códigos Úteis

Mensagem por Kabeção Sáb 20 Out 2012, 13:42

luiz_eldorado, obrigado pelo apoio mas essas funções trabalham por si só.
Não a qualquer mistério nelas.

Aqui prefiro me concentrar em pequenas formulas ou praticas que passam por desapercebido ou são desconhecidas e ajudam bastante como os exemplos que citei.

Mas esse script "gettext" é um exemplo útil.


Última edição por Kabeção em Sáb 20 Out 2012, 14:07, editado 1 vez(es)
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : Códigos Úteis Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

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

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

Códigos Úteis Empty Re: Códigos Úteis

Mensagem por Kapoty Sáb 20 Out 2012, 14:02

Bem, vou postar alguns scripts feitos por mim e que podem ajudar alguns usuarios da gmbr :

Desenhar um numero real na tela usando uma fonte a partir de uma sprite.

Código:
var num,spr,xx,yy;
num=string(argument0)
spr=argument1
xx=argument2
yy=argument3
for (i=0;i<string_length(num);i+=1)
{
draw_sprite_ext(spr,real(string_copy(num,i+1,1)),xx+(i*sprite_get_width(spr)),yy,1,1,1,-1,1)
}
Para usar basta :
nome_do_script(string(numero),nome da sprite,x,y)

Desenhar uma string que só contem caracteres de "A a Z" na tela usando uma fonte a partir de uma sprite.

Código:
var num,spr,xx,yy;
num=string(argument0)
spr=argument1
xx=argument2
yy=argument3
for (i=0;i<string_length(num);i+=1)
{
draw_sprite_ext(spr,real(string_copy(num,i+1,1)),xx+(i*sprite_get_width(spr)),yy,1,1,1,-1,1)
}
Para usar basta :
nome_do_script(string(texto),nome da sprite,x,y)

Desenhar uma figura plana onde você determina o numero de lados, tamanho, x e y.

Código:
num=argument0
a=360/num
tam=argument1
xx=argument2
yy=argument3
for (i=1;i<=num;i+=1)
{
draw_line(xx+lengthdir_x(tam/2,i*a),yy+lengthdir_y(tam/2,i*a),xx+lengthdir_x(tam/2,(i+1)*a),yy+lengthdir_y(tam/2,(i+1)*a))
}
Para usar basta :
nome_do_script(lados,tamanho,x,y)

Função choose do game maker com numero de argumentos ilimitados.

Código:
var str,atu,num,new,i,a,b,ops,c;
str=argument0
atu=0
num=0
new=str
for (i=0;i<255;i+=1)
{
if chr(i)!="|" {
new=string_replace_all(new,chr(i),"")
}}
num=string_length(new)
for (i=0;i<num;i+=1)
{
a=string_pos("|",str)
b=string_copy(str,0,a-1)
str=string_copy(str,a+1,string_length(str)-a+1)
ops[atu]=b
atu+=1
}
ops[atu]=string_copy(str,1,string_length(str))
c=irandom_range(0,atu)
return(ops[c])
Para usar basta :
nome_do_script("opcao1|opcao2|opcao3|...")

Espero que esse tópico foi criado para isso rsrs.
Kapoty
Kapoty

Games Ranking : Nota B

Notas recebidas : E + D + C + B + D +B + A
Data de inscrição : 05/11/2011
Reputação : 22
Número de Mensagens : 635
Prêmios : Códigos Úteis Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 1

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

Ir para o topo Ir para baixo

Códigos Úteis Empty Re: Códigos Úteis

Mensagem por PedroX Dom 21 Out 2012, 17:57

Nesse tópico, coloquei alguns scripts. Os que não tem créditos são os meus. Inclusive alguns são seus.

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Códigos Úteis Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

Códigos Úteis Empty Re: Códigos Úteis

Mensagem por Klior Qua 24 Out 2012, 10:32

Muito bom topico Kabeção, com certeza vou testar esse script de fundir objetos, vou fazer alguns testes com d3d_set_projection_ortho também.
Klior
Klior

Data de inscrição : 07/03/2010
Reputação : 13
Número de Mensagens : 426
Prêmios : Códigos Úteis Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • C#
  • Javascript


Ir para o topo Ir para baixo

Códigos Úteis Empty Re: Códigos Úteis

Mensagem por TRFN Qua 24 Out 2012, 14:45

Eu gostei desses scripts.Facilitam na hora de desenvolver algo , mais principalmente por poupar trabalho...Obrigado Kabeção , provavelmente vou usar esse script de fundir objetos , ele é bem interessante!
Ate+
TRFN
TRFN

Games Ranking : Nota C

Notas recebidas : C + C + C
Data de inscrição : 16/01/2012
Reputação : 70
Número de Mensagens : 1192
Prêmios : Códigos Úteis Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 2

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Web Tecnology
  • Javascript
  • Outros


https://site13.com.br/

Ir para o topo Ir para baixo

Códigos Úteis Empty Re: Códigos Úteis

Mensagem por William Lima Qui 25 Out 2012, 21:53

Sistema de uso fácil para laser:
Código:

/*
Script para laser
argumento 0: x inicial
argumento 1: y inicial
argumento 2: direção
argumento 3: distância máximo que ele atinge
argumento 4: objeto que ele colidirá
*/

var px, py, dir, maxcol, obj, xcol, ycol, col ;
px=argument0;
py=argument1;
dir=argument2;
maxcol=argument3;
obj=argument4;


if collision_line(px,py,px+lengthdir_x(maxcol,dir),py+lengthdir_y(maxcol,dir),obj,1,1)
{
    col=0;
    while !collision_line(px,py,px+lengthdir_x(col,dir),py+lengthdir_y(col,dir),obj,1,1)
    {
        col+=1;
    }   
}
else
{
    col=maxcol;
}

xcol=px+lengthdir_x(col,dir);
ycol=py+lengthdir_y(col,dir);

/*
pode implementar nesse draw_line com:
draw_line_color()
draw_line_width()
draw_line_width_color()
*/

draw_line(px,py,xcol,ycol)

/*
script feito por william lima

*/


Necessita de um objeto para colisão.


Criar variável pelo step
Sem resetar a var a cada step. Para quem tem preguiça de usar o create.
Código:

/*
criar uma variável pelo step
argumento 0: nome da variável
argumento 1: valor da variável

*/

if !variable_local_exists(string(argument0))
{
variable_local_set(string(argument0),argument1)
}

William Lima
William Lima

Games Ranking : Nota A

Notas recebidas : C+A+A+B+A
Data de inscrição : 10/09/2010
Reputação : 10
Número de Mensagens : 430
Prêmios : Códigos Úteis Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 2 Prata x 2 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 2.0
  • Tululoo Game Maker
  • Javascript


https://konsole.studio

Ir para o topo Ir para baixo

Códigos Úteis Empty Re: Códigos Úteis

Mensagem por Luiz A. Oliveira Sex 26 Out 2012, 09:04

Uma especie de image_single para varias sprites em um objeto só.
Se usa assim: draw_sprite(sprite,anime_other(sprite, velocidade),x,y)
Para usar basta criar uma script chamado anime_other e colar o código abaixo:
Código:
 
var anime_sprite;
globalvar anime_speed;
anime_sprite=argument0;
if variable_local_array_get("anime_ index",anime_sprite)==false
{ variable_local_array_set("anime_inde x",anime_sprite,0) }
anime_speed[anime_sprite]=argument1
if anime_index[anime_sprite]<sprite _get_number(anime_sprite)
{ anime_index[anime_sprite]+=anime_speed[anime_sprite] }
else
{ anime_index[anime_sprite]=0 }
return(anime_index[anime_sprite])
PS. Só funciona nas versoes 6~8.1 do GM!
Então ta ai, me desculpem pela formatação, mas é dificil editar um texto pelo celular.

-Ideias saciam a necessidade ;)
Luiz A. Oliveira
Luiz A. Oliveira

Games Ranking : Nota C

Notas recebidas : D-B-C
Data de inscrição : 08/09/2010
Reputação : 5
Número de Mensagens : 914
Prêmios : Códigos Úteis 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

http://luizgm.blogspot.com/

Ir para o topo Ir para baixo

Códigos Úteis Empty Re: Códigos Úteis

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


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