Entrar
Últimos assuntos
» player não consegue andarpor 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
[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 balde de tinta?
» Ragdolls alguém sabe fazer ?
» Alguém sabe como fazer power-ups?
» alguem sabe fazer um obj dar a volta na tela??
» [DUVIDA]alguem sabe se da para fazer um jogo de fazenda????
» Ragdolls alguém sabe fazer ?
» Alguém sabe como fazer power-ups?
» alguem sabe fazer um obj dar a volta na tela??
» [DUVIDA]alguem sabe se da para fazer um jogo de fazenda????
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos