Página 1 de 1

GameMaker Studio 2: Objeto segue a camera

Enviado: Ter Set 22, 2020 9:11 pm
por GhostPower
Boa noite
Creater,

No meu projeto, queria implementar um mapa aonde deslizo com o dedo(touch) ou mouse e o objeto segue fixando na tela que coloquei.

Olhe abaixo pelo link:
https://www.youtube.com/watch?v=HWqpe7OUOoc

Nao to conseguido pelo video, como e que se faz isso?

Desde ja muito obrigado pela ajuda.

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Qua Set 23, 2020 12:51 pm
por Chuaschinai
Bom, no vídeo ele utiliza um objeto para seguir a camera, para servir como HUD ou algo do tipo. Porém você consegue o mesmo efeito e talvez melhor ainda, se usar o Draw Gui, que serve exatamente para isso, ele não segue a camera/view ele é fixo e absoluto, para usar é simples, adicione o Event Draw Gui no objeto, e todo o Draw do objeto coloque lá.

Agora se realmente precisa que o objeto siga a camera, o vídeo que mandou é funcional, talvez não esteja funcionando porque você não habilitou a viewport que você vai usar na room, vá na Room e marque essas opções:

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Qua Set 23, 2020 8:19 pm
por GhostPower
Blz grononmc,

Entao cara, to fazendo aquele mapa igual a este game:

Mapa

Começando no segundos 0:35.E usando o Draw Gui ou a camera?

Muito obrigado pela ajuda.

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Qui Set 24, 2020 1:05 am
por Chuaschinai
A entendi, é que no video anterior o cara ensinava a fazer um objeto seguir a camera, porém você quer arrastar a Camera pela area da room, tipo um Scrolling ou Drag so que na vertical. Então nem precisa de Draw ou Draw Gui você simplesmente deve arrastar a camera.

Create

Código: Selecionar todos

// Salva a posição anterior do mouse
prevMY = 0;
// Se esta arrastando a camera
dragCam = false;
Step

Código: Selecionar todos

// Posições atuais da camera
var _camx = camera_get_view_x(view_camera[0]);
var _camy = camera_get_view_y(view_camera[0]);

// Começa a arrastar
if(mouse_check_button_pressed(mb_left)) {
 prevMY = mouse_y;
 dragCam = true;
}

if(mouse_check_button(mb_left) && dragCam) {
 // Diferença entre a ultima posição e a atual do mouse_y
 var _diff_my = prevMY - mouse_y;
 // Atualiza a posição da camera
 camera_set_view_pos(view_camera[0], _camx, _camy + _diff_my);
}else {
 // Para de arrastar
 dragCam = false;
}
Esse é um código simples e funcional para você poder arrastar a camera, deixei habilitado somente o eixo Y ou seja somente na vertical, porém se precisar na horizontal é só adicionar igual o prevMY.

Lembre-se de ativar aquelas opções no Room Properties para funcionar.

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Sex Set 25, 2020 11:10 am
por GhostPower
Blz grononmc,

Vlw cara pela resposta.

Vou tentar faze isso, deste ja agradeço.

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Sex Set 25, 2020 11:50 am
por GhostPower
Funcionou,

Mas os objetos nao seguem a camera.

Sabe aqueles objetos de navegaçoes(dinheiro,invertario,skill) quero deixar fixado em uma parte da tela seguindo a camera conforme o movimento.

No video que mandei tem o dinheiro e joia fixados no campo superior da tela seguindo a camera.

Voce tem uma ideia de com faço isso?

Obrigado pela ajuda grononmc.

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Sex Set 25, 2020 12:25 pm
por Chuaschinai
Então basta fazer igual o video, ou assim:

Step do objeto que deve seguir a camera

Código: Selecionar todos

// Posição atual da camera
var _cx = camera_get_view_x(view_camera[0]),
    _cy = camera_get_view_y(view_camera[0]);

// Posição que você quer que fique na camera
var _px = 32,
    _py = 32;

// Atualização do objeto para seguir a camera
x = _cx + sprite_xoffset + _px;
y = _cy + sprite_yoffset + _py;
Logicamente se não quiser que o objeto siga, e só usar o Draw Gui sem necessitar desse código acima.

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Sex Set 25, 2020 3:50 pm
por GhostPower
Vlw grononmc,

Cara porque o objeto que segue fica com "toquinho" na tela?,tem uma maneira de suavizar este movimento?

a proposito era isso mesmo que queria

Obrigado pela ajuda.

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Sex Set 25, 2020 9:25 pm
por Chuaschinai
Toquinho, ele fica com tipo um delay?, pra fixar de vez é só colocar todo esse código no End Step, mas se precisar suavizar o movimento, usa a função lerp:

Código: Selecionar todos

// 0.1 é a velocidade que ele suaviza, quando menor mais lerdo ele atualiza a posição
x = lerp(x, _cx + sprite_xoffset + _px, 0.1);
y = lerp(y, _cy + sprite_yoffset + _py, 0.1);

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Sáb Set 26, 2020 7:53 pm
por GhostPower
Vlw muito grononmc,

Cara a ultima coisinha, to tentando travar a camera porque senao a camera vai para o infinito e alem

Entao adicionei um codigo de limitador na camera

Olhe abaixo:

Código: Selecionar todos

if _camy < room_width 
{
	  
if(mouse_check_button_pressed(mb_left)) {
 prevMY = mouse_y;
 dragCam = true;
}
...
Ate trava a camera na parte inferior do map(Room), mas parace que fica mais dificil "puxa" para cima e o limitador da parte superior nao consegui.

o que esta errado na minha logica? o que tenho q fazer?

Muito obrigado pela ajuda.

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Sáb Set 26, 2020 8:19 pm
por Chuaschinai
Sua lógica faz com que execute o código se a posição da camera for menor que o tamanho da room na horizontal, o que não faz sentido, porque a camera anda na vertical.

Você pode usar a função clamp, que limita a area de um numero.
Exemplo:
variavel = -10;
variavel = clamp(variavel, 5, 10)
resultado: variavel = 5;
Ou seja se um a variável extrapolar o limite tanto mínimo ou máximo ele pega o valor referente a este limites.

Substitua a onde atualiza a posição da camera por isso:

Código: Selecionar todos

// Atualiza a posição da camera
camera_set_view_pos(view_camera[0],
    _camx,
    clamp(_camy + _diff_my, 0, room_height-_camh)
);
Perceba que usei clamp somente no eixo Y, com o mínimo de 0 e o máximo de room_height-_camh, ele ficará dentro dos limites da room somente no eixo Y.

Re: GameMaker Studio 2: Objeto segue a camera

Enviado: Seg Set 28, 2020 8:47 pm
por GhostPower
Boa noite grononmc,

Muito obrigado pela sua ajuda, agradeço muito suas respostas e explicaçoes

Consegui implementar o sistema de mapa com touch.

Vlw.