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
[Scirpt] Câmera seguir dois players ao mesmo tempo
3 participantes
Página 1 de 1
[Scirpt] Câmera seguir dois players ao mesmo tempo
Bom dia usuários, voltei depois de muitos milênios! Estive fazendo cursos de computação e fiquei um tempo (alguns anos) off aqui. Agora estou de férias e estive pensando em desenvolver um jogo pra esfriar a cabeça. Pretendo desenvolver um jogo co-op de aventura, que é bem mais divertido. Mas então eu senti uma dificuldade na questão da view, afinal, ela tem de seguir dois players ao mesmo tempo, e cá entre nós, dividir a tela em duas não é uma ideia adequada pra todos os momentos. Procurei alguns tutoriais na GMBR, e ele apenas me ajudaram um pouco. Então matutando sozinho desenvolvi uma maneira bem interessante que pode ser usada por você também!
Esse é o código que vou usar no jogo, aqui funcionou como eu queria, mas se quiser, adapte à vontade.
Para esse código, existem 3 objetos:
objSeguir // será o que a view irá seguir, e que irá seguir os dois players ao simultaneamente. A opção "visible" dele deve estar desmarcada.
objPlayer1 e objPlayer2
Bem, o código inteiro está no objSeguir. Veja:
O que acharam? Alguma correção ou sugestão? Foi útil?
Esse é o código que vou usar no jogo, aqui funcionou como eu queria, mas se quiser, adapte à vontade.
Para esse código, existem 3 objetos:
objSeguir // será o que a view irá seguir, e que irá seguir os dois players ao simultaneamente. A opção "visible" dele deve estar desmarcada.
objPlayer1 e objPlayer2
Bem, o código inteiro está no objSeguir. Veja:
- Código:
view_object[0]=objSeguir; //a view sempre irá seguir este objeto
x = (objPlayer1.x+objPlayer2.x)/2;
y = (objPlayer1.y+objPlayer2.y)/2;
//o objeto vai ficar sempre na média da reta x e y estabelecida entre os dois players. Em outras palavras, ele vai ficar no meio dos deles.
if (objPlayer1.x>objPlayer2.x and objPlayer1.x-objPlayer2.x<100 and objPlayer1.y>objPlayer2.y and objPlayer1.y-objPlayer2.y <100 or objPlayer2.x>objPlayer1.x and objPlayer2.x-objPlayer1.x<100 and objPlayer2.y>objPlayer1.y and objPlayer2.y-objPlayer1.y <100 )
//Nessa parte,vai verificar se os players estão próximos.
{
view_hview[0]=240;
view_wview[0]= 320;
//se sim, as proporções da view serão mantidas.
}
else
//se não estiverem próximos...
if (objPlayer1.x-20< view_xview[0]or objPlayer1.y-20<view_yview[0]or objPlayer2.x-20< view_xview[0] or objPlayer2.y-20< view_yview[0] or objPlayer1.x+20>view_xview[0]+view_wview[0] or objPlayer2.x+20>view_xview[0]+view_wview[0] or objPlayer1.y+20>view_yview[0]+view_hview[0] or objPlayer2.y+20>view_yview[0]+view_hview[0] )
//Essa parte foi a mais trabalhosa, ela verifica se o player está na próximo de chegar na borda da view
{
view_hview[0]+=40;
view_wview[0]+=40;
//se sim, altera as proporções dela, aumentando um pouco.
}
O que acharam? Alguma correção ou sugestão? Foi útil?
Lauro- Games Ranking :
Notas recebidas : C+D
Data de inscrição : 09/11/2010
Reputação : 11
Número de Mensagens : 855
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Scirpt] Câmera seguir dois players ao mesmo tempo
É bem legal jogar jogos co-op com os amigos ou irmaos, sempre resulta em muitas risadas .
Realmente é muito util esse script, vlw por compartilhar.
Nao esqueça de postar o jogo aki pra gente jogar.
Realmente é muito util esse script, vlw por compartilhar.
Nao esqueça de postar o jogo aki pra gente jogar.
mumiaz- Data de inscrição : 21/06/2014
Reputação : 5
Número de Mensagens : 13
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Scirpt] Câmera seguir dois players ao mesmo tempo
O script é funcional, porém ele é meio pesado na minha opinião:
Por experiência própria esse tipo de condição é muito ineficiente, ainda mais se isso for usado em um evento como o Step. Felizmente utilizando teu código como base é possível fazer outro com a mesma função só que mais limpo e mais eficiente:
- Código:
if (objPlayer1.x>objPlayer2.x and objPlayer1.x-objPlayer2.x<100 and objPlayer1.y>objPlayer2.y and objPlayer1.y-objPlayer2.y <100 or objPlayer2.x>objPlayer1.x and objPlayer2.x-objPlayer1.x<100 and objPlayer2.y>objPlayer1.y and objPlayer2.y-objPlayer1.y <100 )
Por experiência própria esse tipo de condição é muito ineficiente, ainda mais se isso for usado em um evento como o Step. Felizmente utilizando teu código como base é possível fazer outro com a mesma função só que mais limpo e mais eficiente:
- Código:
var meio_x, meio_y, zoom;
//Média das posições X e Y dos jogadores.
meio_x = (obj_player1.x + obj_player2.x)/2
meio_y = (obj_player1.y + obj_player2.y)/2
//Distancia entre os 2 jogadores, usado para calcular o zoom.
zoom = point_distance(obj_player1.x, obj_player1.y, obj_player2.x, obj_player2.y)/2
//Tamanho da view é igual a um valor base mais o valor do zoom.
view_wview[0] = 800 + zoom //É divido por 1.3 para preservar o aspecto
view_hview[0] = 600 + zoom/1.3 //ao contrario a tela ficaria distorcida.
//Define a posição X e Y da view como sendo a média das posições dos jogadores
//subtraida pela metade do tamanho horizontal ou vertical das views.
view_xview[0] = meio_x - view_wview[0]/2
view_yview[0] = meio_y - view_hview[0]/2
//Evita que a view mostre fora da room.
view_xview[0] = max(0,min(room_width - view_wview[0],view_xview[0]))
view_yview[0] = max(0,min(room_height - view_hview[0],view_yview[0]))
gabrielsch- Games Ranking :
Notas recebidas : D + A + A
Data de inscrição : 06/12/2009
Reputação : 28
Número de Mensagens : 1230
Prêmios :
x 0 x 0 x 0
x 1 x 2 x 0
x 1 x 0 x 0
Re: [Scirpt] Câmera seguir dois players ao mesmo tempo
Muito bom @gabrielsch, você conseguiu deixar o script bem mais interessante e menos "gambiarrado". Eu realmente estava com problemas com a view fora da room, pode me explicar esse max?
Lauro- Games Ranking :
Notas recebidas : C+D
Data de inscrição : 09/11/2010
Reputação : 11
Número de Mensagens : 855
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Scirpt] Câmera seguir dois players ao mesmo tempo
A função max() te retorna o maior valor dos dois que tu colocou nos argumentos, por exemplo:
Do mesmo jeito que o max funciona existe a função min() que é exatamente o contrário, ela retorna o menor valor.
Sabendo disso é possível limitar um valor usando as duas funções juntas, o código do script segue uma logica bem simples, ele primeiro acha o menor valor entre o tamanho da room menos o tamanho da view e a posição da view, depois que ele retorna esse valor ele usa o mesmo para verificar se é maior que zero usando a função max.
Talvez tenha ficado meio complicada a minha explicação, não sou bom com isso, mas para a felicidade de todo mundo o GMS tem uma função própria pra isso, ela se chama clamp() e se usa desse jeito:
O código acima vai definir o valor da variável como sendo um valor maior que o segundo argumento e menor que o terceiro argumento em relação ao valor que tu colocou no primeiro argumento.
- Código:
variavel = max(2, 5)
Do mesmo jeito que o max funciona existe a função min() que é exatamente o contrário, ela retorna o menor valor.
- Código:
variavel = min(2, 5)
Sabendo disso é possível limitar um valor usando as duas funções juntas, o código do script segue uma logica bem simples, ele primeiro acha o menor valor entre o tamanho da room menos o tamanho da view e a posição da view, depois que ele retorna esse valor ele usa o mesmo para verificar se é maior que zero usando a função max.
Talvez tenha ficado meio complicada a minha explicação, não sou bom com isso, mas para a felicidade de todo mundo o GMS tem uma função própria pra isso, ela se chama clamp() e se usa desse jeito:
- Código:
var = clamp(var, min, max)
O código acima vai definir o valor da variável como sendo um valor maior que o segundo argumento e menor que o terceiro argumento em relação ao valor que tu colocou no primeiro argumento.
- Código:
var = clamp(var, 20, 150)
gabrielsch- Games Ranking :
Notas recebidas : D + A + A
Data de inscrição : 06/12/2009
Reputação : 28
Número de Mensagens : 1230
Prêmios :
x 0 x 0 x 0
x 1 x 2 x 0
x 1 x 0 x 0
Re: [Scirpt] Câmera seguir dois players ao mesmo tempo
Esse script é interessante, mas na minha opinião ele ficou meio estranho em sua visualização final, pois a câmera aumentava e diminuía o zoom sempre, e isso acaba por sendo meio confuso, dá até uma certa tontura no usuário.
O script que eu tinha feito verificava se eles estavam próximo do final da view, pra aí então aumentar tamanho. E pra diminuir, verificava se eles estavam próximos entre si.
Eu tentei adaptar, ficou assim:
Ficou meio estranho, mas foi o melhor que eu consegui fazer.
O script que eu tinha feito verificava se eles estavam próximo do final da view, pra aí então aumentar tamanho. E pra diminuir, verificava se eles estavam próximos entre si.
Eu tentei adaptar, ficou assim:
- Código:
view_object[0]=objCtrl;
x = (objPlayer1.x+objPlayer2.x)/2;
y = (objPlayer1.y+objPlayer2.y)/2;
zoom = point_distance(objPlayer1.x, objPlayer1.y, objPlayer2.x, objPlayer2.y)/2
if (objPlayer1.x>objPlayer2.x and objPlayer1.x-objPlayer2.x<100 and objPlayer1.y>objPlayer2.y and objPlayer1.y-objPlayer2.y <100 or objPlayer2.x>objPlayer1.x and objPlayer2.x-objPlayer1.x<100 and objPlayer2.y>objPlayer1.y and objPlayer2.y-objPlayer1.y <100 )
{
view_wview[0] = 320 + zoom //É divido por 1.3 para preservar o aspecto
view_hview[0] = 240 + zoom/1.3
}
else if (objPlayer1.x-20< view_xview[0]or objPlayer1.y-20<view_yview[0]or objPlayer2.x-20< view_xview[0] or objPlayer2.y-20< view_yview[0] or objPlayer1.x+20>view_xview[0]+view_wview[0] or objPlayer2.x+20>view_xview[0]+view_wview[0] or objPlayer1.y+20>view_yview[0]+view_hview[0] or objPlayer2.y+20>view_yview[0]+view_hview[0] )
{
view_hview[0]+=40;
view_wview[0]+=40;
}
view_xview[0] = max(0,min(room_width - view_wview[0],view_xview[0]))
view_yview[0] = max(0,min(room_height - view_hview[0],view_yview[0]))
Ficou meio estranho, mas foi o melhor que eu consegui fazer.
Lauro- Games Ranking :
Notas recebidas : C+D
Data de inscrição : 09/11/2010
Reputação : 11
Número de Mensagens : 855
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» Como fazer a room seguir dois players em um jogo Online?
» Tocar dois sons ao mesmo tempo
» Ajuda dois objetos executando ao mesmo tempo
» Como fazer um jogocom dois jogadores ao mesmo tempo
» [Resolvido][Dúvida] Choose gera dois números ao mesmo tempo.
» Tocar dois sons ao mesmo tempo
» Ajuda dois objetos executando ao mesmo tempo
» Como fazer um jogocom dois jogadores ao mesmo tempo
» [Resolvido][Dúvida] Choose gera dois números ao mesmo tempo.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos