GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Como ajustar velocidade de cada frame da animação no game maker
por Ralphed Ontem à(s) 18:28

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» 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


Velho Fantasma 1: views (parte 2)

3 participantes

Ir para baixo

Velho Fantasma 1: views (parte 2) Empty Velho Fantasma 1: views (parte 2)

Mensagem por saim Seg 22 Out 2012, 10:22

E chegamos à segunda parte da minha dúvida a respeito de views.
Recapitulando, eu queria ajeitar um script pra ajeitar via código a room criada via código (com room_add()), sendo que ela teria uma altura maior que a janela do jogo. Agradeço a todos que me ajudaram lá, mas o crédito do script vai mesmo para o Alex FC. Eu dei uma jeitada nele, pra poder entrar com mais argumentos, aqui está a versão que estou usando agora:
Código:
// room com view(room, larguraRoom, alturaRoom, larguraView, alturaView, objeto)
// define as coordenadas da janela e tamanho da room (argument0), além de criar um objeto
var larRoom, altRoom, larView, altView;
larRoom = argument1; altRoom = argument2; larView = argument3; altView = argument4;

//Tamanho da room
room_set_width(argument0, larRoom);
room_set_height(argument0, altRoom);

//Configura view
room_set_view(argument0, 0, true, 0, altRoom - altView, larView, altView, 0, 0, larView, altView, 200,  200, 0, 0, argument5);

//Coloca background na room
// room_set_background(argument0,0,1,0,background0,0,0,1,1,0,0,1) // comentado porque ainda não estou usando uma background

//Adiciona objeto na room
room_instance_add(argument0, 150, altRoom, argument5)

//Ativa view
room_set_view_enabled(argument0, true);
Notem que o script não definem o valor de view_object[0], então não deve haver nenhuma movimentação na view, a princípio.

Agora a dúvida.

CLARO que eu quero que a view se movimente, mas eu quero fazer isso via código. Então, no objControle, eu adicionei no step:
Código:
view_yview[0] -= 1;
Isso parece ter funcionado. Depois eu vou precisar de um controle maior, mas pra começar, está bom.
Então, finalmente, eu criei um outro objeto pra uma engine de escuridão - aquela velha técnica de desenhar uma surface preta sobre o jogo. No draw desse objeto, eu ajeitei a surface "preto" e desenhei a surface na tela
Código:
surface_set_target(preto);
draw_clear($000000);
draw_set_blend_mode_ext(bm_zero, bm_inv_src_color);

with(objPlayer){
   draw_sprite_ext(sprFoco, 0, x - view_xview[0], y - view_yview[0], other . escala, other . escala, 0, image_blend, 1); //sprFoco é um círculo com alpha reduzindo nas extremidades
   }

draw_set_blend_mode(bm_normal);
surface_reset_target();

draw_surface_ext(preto, view_xview[0], view_yview[0], 1, 1, 0, $ffffff, alphaLuz);
Resultado: a surface foi desenhada numa posição cada vez mais alta, fugindo da tela. Foi até gozado ver os focos de luz sendo desenhados no lugar certo da surface e vê-la sendo desenhada no lugar errado, sendo que usei a mesma variável (view_yview[0]) pra definir as duas posições.

Reparei que quando eu não mexia no valor de view_yview[0] (no objControle), isso não acontecia, então troquei a última linha por:
Código:
draw_surface_ext(preto, view_xview[0], 0, 1, 1, 0, $ffffff, alphaLuz);
Isso resolveu.

Bom, eu estou programando através do meu jogo genérico, então alguns comportamentos são estranhos mesmo. Gostaria que alguém verificasse se essa solução faz sentido, porque pra mim, não faz. Eu achava acho que o certo seria como fiz na primeira tentativa, desenhar a surface na posição da view.

Acho que você podem querer o resto dos códigos pra testar. Vou deixar aqui num spoiler:
demais códigos:
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : Velho Fantasma 1: views (parte 2) Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Velho Fantasma 1: views (parte 2) Empty Re: Velho Fantasma 1: views (parte 2)

Mensagem por luiz_eldorado Seg 22 Out 2012, 14:29

Testei aqui os códigos e deu o mesmo problema, mesmo não sendo um jogo genérico. Estranho... parece que quando desenhamos a surface, a "origem" para desenhar é a janela, e não a room.
Mas qual é o problema?
luiz_eldorado
luiz_eldorado

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 30/07/2011
Reputação : 47
Número de Mensagens : 928
Prêmios : Velho Fantasma 1: views (parte 2) Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://luizpontes.tk/

Ir para o topo Ir para baixo

Velho Fantasma 1: views (parte 2) Empty Re: Velho Fantasma 1: views (parte 2)

Mensagem por saim Seg 22 Out 2012, 15:26

O problema é que isso não faz sentido! As coordenadas (x, y) são da room, não da janela... certo?
Se eu aceitar uma solução que eu não consiga entender, daqui a um tempo você vai me ver matando uma galinha preta em cima do computador...

Mas o problema piorou, agora. Veja bem, o objEscuro tem a depth -900 e o objControle (que agora mudei o nome pra objControleJogo, porque existem outros controles nos menus) tem a depth -1000.
Eu notava que alguns códigos do draw do objControle estavam acontecendo por baixo da surface (não tinha reparado antes).
Apesar de achar que não deveria funcionar, inverti a ordem de criação dos objetos. Agora, o objEscuro cria o objControle, que não cria mais o objEscuro. O erro mudou.

Agora, o draw do objControle está por cima da surface (conforme esperado), mas a view não se movimenta mais! Como se não fosse estranho o bastante, o draw do objControle sobe e a posição do foco de luz na surface desce!

Ambos dependem do valor de view_yview[0], então entendo que esse valor está sendo variado, conforme o step do objControle manda, apesar da view não andar.

Como eu não postei o draw do objControle e ele é um pouco complexo (depende de um monte de variáveis que eu não expliquei), considere que ele é apenas
Código:
draw_rectangle(view_xview[0] + 20, view_yview[0] + 20, view_xview[0] + 80, view_yview[0] + 80, 0)
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : Velho Fantasma 1: views (parte 2) Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Velho Fantasma 1: views (parte 2) Empty Re: Velho Fantasma 1: views (parte 2)

Mensagem por Kabeção Seg 22 Out 2012, 16:10

Use o debug e veja se a view esta mesmo habilitada e visível.
Se não sei se entendi mas testei aqui e esta tudo certo.
Não era pra acontecer isso?
https://dl.dropbox.com/u/60691076/exemplos/view/index.html
Coloquei para reiniciar quando chegasse no final da view.

Por falar nisso, pode não ter nada a ver, mas não é recomendável desenhar na surface no evento Draw.

Por curiosidade que versão do GMS você está usando?
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : Velho Fantasma 1: views (parte 2) Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

Velho Fantasma 1: views (parte 2) Empty Re: Velho Fantasma 1: views (parte 2)

Mensagem por saim Qua 24 Out 2012, 11:03

Ufa, finalmente um descanso pra responder ao tópico...

Você editou a mensagem? Em casa eu conseguia jogar o jogo, aqui eu só vejo o link. Mas isso não vem ao caso.
O resultado era - É - basicamente, esse mesmo. Só quero entender porque estou tendo que fazer tanta gambiarra pra chegar nele. O valor de view_yview não é uma global?

Quanto às surfaces, realmente parece ter alguma coisa a ver, porque eu não consigo desenhar a surface com o screen_redraw (pra fazer uma pausa) se ela está no draw_event. Mais que isso, passei o código pro end step e o erro inverteu (ou corrigiu)! Agora eu posso usar os valores de view_yview e view_xview pra desenhar a surface.

Faz sentido pra você?

[Edit:] Ah, e eu estou usando o GM8.0
saim
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : Velho Fantasma 1: views (parte 2) Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Velho Fantasma 1: views (parte 2) Empty Re: Velho Fantasma 1: views (parte 2)

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos