
ao observar esta imagem, nós podemos ver diversas subimagens para movimentos e a volta do monstro.
sem falar da animação... como posso juntar algumas subimagens para desenhar o monstro em 3D?
(assim, com a camara podia ver o monstro por completo)
Obrigado por visitar a The Game Makers Brasil |
Código: Selecionar todos
//evento Create:
z=40;
p=64;
w=64;
h=64;
image_speed=0;
angle=point_direction(x, y, objCamera.x, objCamera.y)
image_index=angle*(image_number)/360 *10;
//evento Step:
angle=point_direction(x, y, objCamera.x, objCamera.y)
image_index=ceil(angle*(image_number)/360 *10);
//evento Draw:
d3d_transform_set_identity();
d3d_transform_add_rotation_z(point_direction(x, y, objCamera.x, objCamera.y)+90);
d3d_transform_add_translation(x, y, z)
d3d_draw_wall(0+64,0+64, 0+64, 0, 0, 0, sprite_get_texture(sprCacodemon,image_index),1,1);
d3d_transform_set_identity();
Código: Selecionar todos
z=40;
p=64;
w=64;
h=64;
image_speed = 0;
angle = point_direction(x, y, objCamera.x, objCamera.y);
image_index = angle*image_number/360;
Código: Selecionar todos
angle = point_direction(x, y, objCamera.x, objCamera.y);
image_index = angle*image_number/360;
Código: Selecionar todos
Create:
d3d_start(); //Inicia o 3d
direction = 0; //Direção da camera (horizontal)
pitch = 0; //Direção da camera (vertical)
z = 0; //Altura da camera
texture = background_get_texture(Txt_Floor) //Textura do chão
Step:
direction-=(display_mouse_get_x()-display_get_width()/2)/10; //Muda a direção (horizontal) com base no x do mouse na tela
pitch=clamp(pitch+(display_mouse_get_y()-display_get_height()/2)/10,-80,80); //Muda a direção (vertical) com base no y do mouse na tela
display_mouse_set(display_get_width()/2,display_get_height()/2); //Centraliza o mouse no centro da tela
if keyboard_check(vk_escape) {game_end()} //Fecha o jogo com a tecla "Esc" (já que o mouse fica preso no centro da tela)
var d=degtorad(direction); //Converte os graus da direção em radians
switch(keyboard_key){ //Faz a camera andar (da pra melhorar o codigo para fazer segurar mais de uma tecla)
case ord("A"):
x-=sin(d)*4;
y-=cos(d)*4;
break;
case ord("D"):
x+=sin(d)*4;
y+=cos(d)*4;
break;
case ord("S"):
x-=cos(d)*4;
y+=sin(d)*4;
break;
case ord("W"):
x+=cos(d)*4;
y-=sin(d)*4;
break;
}
Draw:
draw_set_color(c_white); //Define a cor como white (branca) para que o jogo não fique preto
d3d_set_projection(x,y,z+16,x+cos(degtorad(direction)),y-sin(degtorad(direction)),z-sin(degtorad(pitch))+16,0,0,1); //Meio complicado de explicar sugiro etudar :maluco:
d3d_draw_floor(0,0,0,room_width,room_height,0,texture,background_get_width(Txt_Floor),background_get_height(Txt_Floor)) //Desenha o chão do tamanho da sala
Agora o Obj_Megaman ou oque voce preferir
Create:
index = 0; //A subimg do sprite
xx1 = 1; //Estava tendo problemas com o sprite lateral que era menor que os demais então criei essas variaveis para mudar o tamanho da "wall" de acordo com o sprite
xx2 = 1; //Eu nem utilizei o yy1 e yy2 porque eles davam uma projeção errada ao objeto,fazendo com que ele não ficasse virado pra camera
yy1 = 1; //''
yy2 = 1; //''
direction = 0; //Direção do objeto
z = 0; //Altura do objeto
sprite_direction = 0; //Qual sprite ele desenha de acordo com a direção que o jogador o vê
Step:
sprite_direction = point_direction(x,y,Obj_Camera.x,Obj_Camera.y) //Define a direção que a camera tem do objeto
//Define suas "index" e o tamanho da "wall" (Lembrando eu fiz esse codigo porque estava inspirado :sorrir: então deve ter jeito mais simples de se fazer)
if sprite_direction >= 0 && sprite_direction < 45 {index = 0;xx1=-9.5;yy1=-9.5;xx2=9.5;yy2=9.5}
if sprite_direction >= 45 && sprite_direction < 90 {index = 1;xx1=-10.5;yy1=-10.5;xx2=10.5;yy2=10.5}
if sprite_direction >= 90 && sprite_direction < 135 {index = 2;xx1=-6;yy1=-6;xx2=6;yy2=6}
if sprite_direction >= 135 && sprite_direction < 180 {index = 3;xx1=-10.5;yy1=-10.5;xx2=10.5;yy2=10.5}
if sprite_direction >= 180 && sprite_direction < 225 {index = 4;xx1=-9.5;yy1=-9.5;xx2=9.5;yy2=9.5}
if sprite_direction >= 225 && sprite_direction < 270 {index = 5;xx1=-10.5;yy1=-10.5;xx2=10.5;yy2=10.5}
if sprite_direction >= 270 && sprite_direction < 315 {index = 6;xx1=-6;yy1=-6;xx2=6;yy2=6}
if sprite_direction >= 315 && sprite_direction < 360 {index = 7;xx1=-10.5;yy1=-10.5;xx2=10.5;yy2=10.5}
Draw: //Desculpe mas eu precisei pegar seu codigo para criar isso (pq eu tinha me esquecido como se faz)
d3d_transform_set_identity(); //Define a transformação para a identidade (sem transformação)
d3d_transform_add_rotation_z(point_direction(x, y, Obj_Camera.x, Obj_Camera.y)+90); //Adiciona uma rotação em torno do eixo z com a quantidade indicada
d3d_transform_add_translation(x, y, z) //Adiciona uma tradução sobre o vetor indicado
d3d_draw_wall(xx1,0,24,xx2,0,0,sprite_get_texture(Spr_Megaman,index),1,1); //Desenha uma parede com o xx1 e xx2 (do tamanho das sprites que era 24),desenha o sprite com o "index")
d3d_transform_set_identity(); //Define a transformação para a identidade (sem transformação)
Pronto.
Obs :As sprites exibidas nas gifs não são de minha autoria,eu peguei de um jogo que tinha aqui.
O nome do jogo é Mega Man 8-bit Deathmatch
Link:http://cutstuff.net/mm8bdm/
Obs2 :O jogo é uma hack de doom
Código: Selecionar todos
sprite_direction = point_direction(x,y,objCamera.x,objCamera.y) //Define a direção que a camera tem do objeto
Código: Selecionar todos
///GetSubImage2DSprite(objDrawed, objCamera, sprSprite);
imagecount=sprite_get_number(argument2);
sprite_direction = point_direction(argument0.x,argument0.y,argument1.x,argument1.y);
index=0;
for (i=0; i<360; i+=(360/imagecount))
{
if sprite_direction >= (i) && sprite_direction < (i+(360/imagecount)) then
{
return index;
}
index++;
}
index-=1
return index;
Código: Selecionar todos
//don't draw if too far from camera
if distance_to_object (obj_camera)>2048 then exit;
Código: Selecionar todos
//draw virtual rotating ball
d3d_transform_set_identity();
d3d_transform_add_rotation_x(90);
d3d_transform_add_rotation_z(point_direction(x, y, obj_character.x, obj_character.y)+90);
d3d_transform_add_translation(x, y, z+64)
draw_sprite_ext(spr_virtual, image_index, 0, 0, 1, 1, 0, c_white, 1);
d3d_transform_set_identity();
Código: Selecionar todos
//set angle and image
angle=point_direction(x, y, obj_character.x, obj_character.y)
image_index=angle*8/360; //8 is the number of rotation images
Código: Selecionar todos
///GetSubImage2DSprite(objDrawed, objCamera, sprSprite);
imagecount=sprite_get_number(argument2);
sprite_direction = point_direction(argument0.x,argument0.y,argument1.x,argument1.y)+argument0.direction;
if sprite_direction>360 then sprite_direction-=360;
index=sprite_direction*imagecount/360;
return ceil(index);
//Create:
direction =180 -90;
Usuários navegando neste fórum: Semrush [Bot] e 11 visitantes