Entrar
Últimos assuntos
» Retorno da GMBR!!!por theguitarmester Ter 19 Mar 2024, 22:38
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42
» 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
» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18
» 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
» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56
» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49
» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21
» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21
» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39
» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16
» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05
» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55
» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39
» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28
» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01
[Pedido] Alguem sabe fazer uma dll?
2 participantes
Página 1 de 1
[Pedido] Alguem sabe fazer uma dll?
Olha, eu tenho um script feito por min para ler arquivos .obj. O que acontece é que é meio lento e eu acho que dentro de uma dll ficaria bem mais rápido, mais eu já tentei de todo jeito e não consigo fazer a dll, na hora de compialr sempre falta alguma coisa, compilou errado e blablabla.
Alguem se disponibiliza a fazer uma dll pra min? Calma... eu tenho aqui a gml e é fácil converter pra C, só na hora de fazer isso é que complica.
Eu dividi, mais no final das contas, tudo é junto
Agora aqui faz o modelo:
Obs: f_v é o mesmo que ds_list_find_value
Só lembrando, que ao converter , o melhor é tirar o máximo possível das funções do GameMaker, por exemplo trocando as funções do Gm de leitura de arquivos por outras nativas de C, trocando ds_list por qualquer outra coisa(eu não sei o que pode ser usado, mais ela é meio pesada), trocando as funções de string do GM por uma nativa da linguagem em fim, o máximo possível , pra ver se fica mais rápida a leitura de .obj. E também de colocar as variáveis como temporárias.
Eu conheco algumas dll que fazem isso , até a gmsdk, mais sempre tem um problema, eurealmente queria uma feita com esse script, MAIS EU não consigo
Alguem se disponibiliza a fazer uma dll pra min? Calma... eu tenho aqui a gml e é fácil converter pra C, só na hora de fazer isso é que complica.
Eu dividi, mais no final das contas, tudo é junto
- Código:
file=file_text_open_read(argument0)
xx=ds_list_create();yy=ds_list_create();zz=ds_list_create()//Coordenadas
nx=ds_list_create();ny=ds_list_create();nz=ds_list_create()//Normais
tx=ds_list_create();ty=ds_list_create()//Texturas
t_g[0,0]=ds_list_create();t_g[0,1]=ds_list_create();t_g[0,2]=ds_list_create()//Possuem o indice do vertice,normal,textura da 1
t_g[1,0]=ds_list_create();t_g[1,1]=ds_list_create();t_g[1,2]=ds_list_create()//Possuem o indice do vertice,normal,textura da 2
t_g[2,0]=ds_list_create();t_g[2,1]=ds_list_create();t_g[2,2]=ds_list_create()//Possuem o indice do vertice,normal,textura da 3
while(!file_text_eof(file)){
str=file_text_read_string(file)
file_text_readln(file)
switch(string_copy(str,1,string_pos(' ',str)-1)){
case 'v':{//Ler vertice
tnum=string_pos(' ',str)+1
str=string_copy(str,tnum,string_length(str))
tnum=string_copy(str,1,string_pos(' ',str)-1)
str=string_copy(str,string_pos(' ',str)+1,string_length(str))
ds_list_add(xx,real(tnum))
tnum=string_copy(str,1,string_pos(' ',str)-1)
str=string_copy(str,string_pos(' ',str)+1,string_length(str))
ds_list_add(zz,real(tnum))
ds_list_add(yy,real(str))
};break;
case 'vt':{//Ler textura
tnum=string_pos(' ',str)+1
str=string_copy(str,tnum,string_length(str))
tnum=string_copy(str,1,string_pos(' ',str)-1)
str=string_copy(str,string_pos(' ',str)+1,string_length(str))
ds_list_add(tx,real(tnum))
ds_list_add(ty,1-real(str))//Inversão em y
};break;
case 'vn':{//Ler normais
tnum=string_pos(' ',str)+1
str=string_copy(str,tnum,string_length(str))
tnum=string_copy(str,1,string_pos(' ',str)-1)
str=string_copy(str,string_pos(' ',str)+1,string_length(str))
ds_list_add(nx,real(tnum))
tnum=string_copy(str,1,string_pos(' ',str)-1)
str=string_copy(str,string_pos(' ',str)+1,string_length(str))
ds_list_add(nz,real(tnum))
ds_list_add(ny,real(str))
};break;
case 'f':{//Ler faces
tnum=string_pos(' ',str)+1
str=string_copy(str,tnum,string_length(str))
tnum=string_copy(str,1,string_pos(' ',str)-1)
str=string_copy(str,string_pos(' ',str)+1,string_length(str))
{//Primeira vértice
str2=tnum
tnum2=string_copy(str2,1,string_pos('/',str2)-1)
str2=string_copy(str2,string_pos('/',str2)+1,string_length(str2))
ds_list_add(t_g[0,0],real(tnum2))
tnum2=string_copy(str2,1,string_pos('/',str2)-1)
str2=string_copy(str2,string_pos('/',str2)+1,string_length(str2))
ds_list_add(t_g[0,2],real(tnum2))
ds_list_add(t_g[0,1],real(str2))
}
tnum=string_copy(str,1,string_pos(' ',str)-1)
str=string_copy(str,string_pos(' ',str)+1,string_length(str))
{//Segunda vértice
str2=tnum
tnum2=string_copy(str2,1,string_pos('/',str2)-1)
str2=string_copy(str2,string_pos('/',str2)+1,string_length(str2))
ds_list_add(t_g[1,0],real(tnum2))
tnum2=string_copy(str2,1,string_pos('/',str2)-1)
str2=string_copy(str2,string_pos('/',str2)+1,string_length(str2))
ds_list_add(t_g[1,2],real(tnum2))
ds_list_add(t_g[1,1],real(str2))
}
{//Terceira vértice
str2=str
tnum2=string_copy(str2,1,string_pos('/',str2)-1)
str2=string_copy(str2,string_pos('/',str2)+1,string_length(str2))
ds_list_add(t_g[2,0],real(tnum2))
tnum2=string_copy(str2,1,string_pos('/',str2)-1)
str2=string_copy(str2,string_pos('/',str2)+1,string_length(str2))
ds_list_add(t_g[2,2],real(tnum2))
ds_list_add(t_g[2,1],real(str2))
}
};break;
}
}
file_text_close(file)
Agora aqui faz o modelo:
Obs: f_v é o mesmo que ds_list_find_value
- Código:
model=argument0
d3d_model_primitive_begin(model,pr_trianglelist)
for(i=0;i<ds_list_size(t_g[0,0]);i+=1){
pos1=f_v(t_g[0,0],i)-1
pos2=f_v(t_g[0,1],i)-1
pos3=f_v(t_g[0,2],i)-1
d3d_model_vertex_normal_texture(model,f_v(xx,pos1)*argument1,f_v(yy,pos1)*argument1,f_v(zz,pos1)*argument1,
f_v(nx,pos2),f_v(ny,pos2),f_v(nz,pos2),f_v(tx,pos3),f_v(ty,pos3))
pos1=f_v(t_g[1,0],i)-1
pos2=f_v(t_g[1,1],i)-1
pos3=f_v(t_g[1,2],i)-1
d3d_model_vertex_normal_texture(model,f_v(xx,pos1)*argument1,f_v(yy,pos1)*argument1,f_v(zz,pos1)*argument1,
f_v(nx,pos2),f_v(ny,pos2),f_v(nz,pos2),f_v(tx,pos3),f_v(ty,pos3))
pos1=f_v(t_g[2,0],i)-1
pos2=f_v(t_g[2,1],i)-1
pos3=f_v(t_g[2,2],i)-1
d3d_model_vertex_normal_texture(model,f_v(xx,pos1)*argument1,f_v(yy,pos1)*argument1,f_v(zz,pos1)*argument1,
f_v(nx,pos2),f_v(ny,pos2),f_v(nz,pos2),f_v(tx,pos3),f_v(ty,pos3))
}
d3d_model_primitive_end(model)
Só lembrando, que ao converter , o melhor é tirar o máximo possível das funções do GameMaker, por exemplo trocando as funções do Gm de leitura de arquivos por outras nativas de C, trocando ds_list por qualquer outra coisa(eu não sei o que pode ser usado, mais ela é meio pesada), trocando as funções de string do GM por uma nativa da linguagem em fim, o máximo possível , pra ver se fica mais rápida a leitura de .obj. E também de colocar as variáveis como temporárias.
Eu conheco algumas dll que fazem isso , até a gmsdk, mais sempre tem um problema, eurealmente queria uma feita com esse script, MAIS EU não consigo
Rodrigo Santiago- Games Ranking :
Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Reputação : 73
Número de Mensagens : 1281
Prêmios :
x 0 x 0 x 0
x 3 x 1 x 3
x 0 x 0 x 0
Re: [Pedido] Alguem sabe fazer uma dll?
Em C++, uma DLL para GM é feita mais ou menos assim:
char * = string
double = real
Até mais!
- Código:
#include <windows.h>
#define GML extern "C" __declspec (dllexport)
//Funcao que retorna double
GML double NomedaFuncao(char * argumento1, double argument2)
{
return resultado_double;
}
//Funcao que retorna string
GML char * NomedaFuncao(char * argumento1, double argument2)
{
return resultado_ptchar; // string.c_str() pode ser necessário dependendo
}
BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
{
return TRUE;
}
char * = string
double = real
Até mais!
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: [Pedido] Alguem sabe fazer uma dll?
Ok...já tentei, mais como eu compilo pra sair uma dll? Ela vai servir pra 32 e 64 bit? E mais umas 300 perguntas...e... por isso que eu queria que alguem compilasse pra min, eu deixei em gml pq uma dll pode ser feita em várias linguagens...
Rodrigo Santiago- Games Ranking :
Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Reputação : 73
Número de Mensagens : 1281
Prêmios :
x 0 x 0 x 0
x 3 x 1 x 3
x 0 x 0 x 0
Tópicos semelhantes
» alguem sabe fazer um obj dar a volta na tela??
» Ragdolls alguém sabe fazer ?
» [Resolvido] Alguém sabe fazer um jogo do sonic???
» alguem sabe fazer um balde de tinta?
» Alguém sabe como fazer power-ups?
» Ragdolls alguém sabe fazer ?
» [Resolvido] Alguém sabe fazer um jogo do sonic???
» alguem sabe fazer um balde de tinta?
» Alguém sabe como fazer power-ups?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|