Entrar
Ú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
Página 1 de 1
Códigos Úteis
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
Diversos
Práticas e afins
Scripts
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;
}
}
Última edição por Kabeção em Dom 21 Out 2012, 11:43, editado 10 vez(es)
Re: Códigos Úteis
Legal xD
Alguns scripts que eu peguei do MatheusReis:
Ler uma linha de um arquivo aberto:
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 _;
- Código:
//wt(file,text)
file_text_write_string(argument0,string(argument1))
file_text_writeln(argument0)
- 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;
Re: Códigos Úteis
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.
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)
Re: Códigos Úteis
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.
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.
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.
nome_do_script(lados,tamanho,x,y)
Função choose do game maker com numero de argumentos ilimitados.
nome_do_script("opcao1|opcao2|opcao3|...")
Espero que esse tópico foi criado para isso rsrs.
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)
}
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)
}
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))
}
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])
nome_do_script("opcao1|opcao2|opcao3|...")
Espero que esse tópico foi criado para isso rsrs.
Kapoty- Games Ranking :
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 :
x 0 x 0 x 0
x 1 x 0 x 1
x 0 x 0 x 0
Re: Códigos Úteis
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:
Re: Códigos Úteis
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- Data de inscrição : 07/03/2010
Reputação : 13
Número de Mensagens : 426
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- C#
- Javascript
Re: Códigos Úteis
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+
Ate+
Re: Códigos Úteis
Sistema de uso fácil para laser:
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:
/*
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)
}
Re: Códigos Úteis
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:
Então ta ai, me desculpem pela formatação, mas é dificil editar um texto pelo celular.
-Ideias saciam a necessidade ;)
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])
Então ta ai, me desculpem pela formatação, mas é dificil editar um texto pelo celular.
-Ideias saciam a necessidade ;)
Tópicos semelhantes
» Dicas Ùteis
» [Engines] Projetos que lhe podem ser úteis
» Sites úteis com funcionalidades diferenciadas!
» Códigos GML
» codigos
» [Engines] Projetos que lhe podem ser úteis
» Sites úteis com funcionalidades diferenciadas!
» Códigos GML
» codigos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|