Entrar
Últimos assuntos
» Retorno da GMBR!!!por theguitarmester Ter 19 Mar 2024, 22:38
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42
» 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
» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05
» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55
» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39
» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28
» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01
Checar objetos e fora da room
4 participantes
Página 1 de 1
Checar objetos e fora da room
eu tenho uma room dividida em 32x32 e objetos tambem 32x32 q serão criados nesse grid .
Oque ocorre é que um desses objs 32x32 gera outro obj 32x32 (32 pixeis a direita), a origem ta 0,0 , como checar se ja há um obj desses a direita para se houver, não poder criar ?
eu tentei collision_point e place_meeting .
E outra, quero checar tb se a direita dele n é o final da room, pq se for ele n poderá criar.
THX
Oque ocorre é que um desses objs 32x32 gera outro obj 32x32 (32 pixeis a direita), a origem ta 0,0 , como checar se ja há um obj desses a direita para se houver, não poder criar ?
eu tentei collision_point e place_meeting .
E outra, quero checar tb se a direita dele n é o final da room, pq se for ele n poderá criar.
THX
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Checar objetos e fora da room
Tentou instance_position()?
Gabreel- Data de inscrição : 02/10/2009
Reputação : 52
Número de Mensagens : 2232
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Game Maker Studio 2.0
- Javascript
- Outros
Re: Checar objetos e fora da room
como usaria isto ? *-*
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Checar objetos e fora da room
var next_i;
next_i = instance_position(x+32,y,OBJ);
if !instance_exists(next_i) instance_create(x+32,y,OBJ);
Não sei se vai funfar, peguei esse código baseado no help do GM
next_i = instance_position(x+32,y,OBJ);
if !instance_exists(next_i) instance_create(x+32,y,OBJ);
Não sei se vai funfar, peguei esse código baseado no help do GM
Gabreel- Data de inscrição : 02/10/2009
Reputação : 52
Número de Mensagens : 2232
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Game Maker Studio 2.0
- Javascript
- Outros
Re: Checar objetos e fora da room
não funcionou =/ se puder testar ai ou me fazer uma engine seria mto bom
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Checar objetos e fora da room
Um objeto que cria outro objeto não é uma boa ideia...
Por mais que um "if" impeça-o de criar infinitos outros objetos, o objeto ficará constantemente fazendo a checagem para saber se pode ou não criar o objeto, e isso, consome memória e atrapalha o desempenho do jogo...
É melhor você criar um único objeto que faça um loop (for ou while, o que você preferir) e crie os objetos. Mas para saber quantos objetos esse objeto deve criar, primeiro você deve fazer um calculo medindo a distancia do ponto que este objeto se encontra até o ponto máximo de criação e dividir por 32, que é a largura do seu objeto.
Por exemplo, para fazer isso do canto esquerdo até o direito da room, ficaria algo mais ou menos assim:
Por mais que um "if" impeça-o de criar infinitos outros objetos, o objeto ficará constantemente fazendo a checagem para saber se pode ou não criar o objeto, e isso, consome memória e atrapalha o desempenho do jogo...
É melhor você criar um único objeto que faça um loop (for ou while, o que você preferir) e crie os objetos. Mas para saber quantos objetos esse objeto deve criar, primeiro você deve fazer um calculo medindo a distancia do ponto que este objeto se encontra até o ponto máximo de criação e dividir por 32, que é a largura do seu objeto.
Por exemplo, para fazer isso do canto esquerdo até o direito da room, ficaria algo mais ou menos assim:
- Código:
Qtd = (room_width - x)\32;
for (i = 0; i < Qtd; i+=1){
instance_create(x+32*i,y,objeto);
}
Re: Checar objetos e fora da room
Willy eu fiz o seguinte eu coloquei um variavel define que se ela for 0 o código é iniciado e no final do código eu coloquei define = 1 , oq pra mim pararia a execução, mas ela continua acontecendo ? '-'
E n da pra usar for pq a criação do proximo obj depende de ql é esse obj q vai criar entendeu ?
E n da pra usar for pq a criação do proximo obj depende de ql é esse obj q vai criar entendeu ?
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Checar objetos e fora da room
Isso apenas impede que mais objetos sejam criados, mas a checagem da variável permanecerá acontecendo... Geralmente essa simples checagem não consome muita memória, mas se este não for o caso, faça com esse objeto se autodestruir e crie um outro objeto no lugar. Esse novo objeto seria apenas a sprite.
Bom, voltando ao foco da sua pergunta, fiz uma pequena engine que provavelmente vai te ajudar. Ela não consumirá memória pois a criação dos objetos está no create.
Download
[Edit]
Desculpe, cometi um pequeno engano na engine... No create do o_azul, eu coloquei duas vezes "!instance_place(x+32,y,o_vermelho)". Na verdade, era pra ser um o_vermelho e um o_azul. Essa checagem serve pra não criar o_azul em cima de outro o_azul.
Bom, voltando ao foco da sua pergunta, fiz uma pequena engine que provavelmente vai te ajudar. Ela não consumirá memória pois a criação dos objetos está no create.
Download
[Edit]
Desculpe, cometi um pequeno engano na engine... No create do o_azul, eu coloquei duas vezes "!instance_place(x+32,y,o_vermelho)". Na verdade, era pra ser um o_vermelho e um o_azul. Essa checagem serve pra não criar o_azul em cima de outro o_azul.
Re: Checar objetos e fora da room
Perfeito willy, vlw msm
mas agr tem um negócio shuahsauhs a room ta 32000x32000 no caso daria 1 milhão de objetos na room. O FPS só fica em 0 perto das 6mil instâncias oq ta mto longe doque eu queria, tem como transformar o obj em um tile ou sei la ? eu fiz oq vc falou de deletar o obj e por outro só com a imagem e eu fiz. Mas ainda só chega 6mil , há algo a se fazer ? o.o
mas agr tem um negócio shuahsauhs a room ta 32000x32000 no caso daria 1 milhão de objetos na room. O FPS só fica em 0 perto das 6mil instâncias oq ta mto longe doque eu queria, tem como transformar o obj em um tile ou sei la ? eu fiz oq vc falou de deletar o obj e por outro só com a imagem e eu fiz. Mas ainda só chega 6mil , há algo a se fazer ? o.o
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Checar objetos e fora da room
Wow, realmente é uma room grande!
A melhor saída é desativar os objetos que não vemos, ou seja, os objetos que estão fora da view, e para isso, usaremos a função instance_deactivate_region() para desativar e a função instance_activate_region para ativar os objetos que foram desativados.
Faça o seguinte: Crie um objeto e nomeie-o como quiser. Adicione o evento step e coloque o seguinte código:
Deactive:
Os quatro primeiro argumentos servem para definir uma área, que no caso, é a área da view. O quinto argumento serve para saber se os objetos a serem desativados está dentro (true) ou fora (false) dessa área. O ultimo argumento pergunta se você quer desativar todos os objetos exceto o objeto que está usando esse código.
Activate:
Os argumentos são os mesmos, porém, não existe o sexto argumento. Repare que eu coloquei uma margem extra de 96 pixels para fora da view. Isso serve para evitar que objetos "apareçam" tarde de mais ou cedo de mais na view. Aumente se achar necessário.
Espero ter ajudado... Dúvidas é só falar.
A melhor saída é desativar os objetos que não vemos, ou seja, os objetos que estão fora da view, e para isso, usaremos a função instance_deactivate_region() para desativar e a função instance_activate_region para ativar os objetos que foram desativados.
Faça o seguinte: Crie um objeto e nomeie-o como quiser. Adicione o evento step e coloque o seguinte código:
- Código:
//Desativa todas as instâncias que estiverem fora da view.
instance_deactivate_region(view_xview[0],view_yview[0],view_wview[0],view_hview[0],false,true);
//Ativa todas as instâncias que estiverem dentro da view.
instance_activate_region(view_xview[0]-96,view_yview[0]-96,view_wview[0]+96,view_hview[0]+96,true);
Deactive:
Os quatro primeiro argumentos servem para definir uma área, que no caso, é a área da view. O quinto argumento serve para saber se os objetos a serem desativados está dentro (true) ou fora (false) dessa área. O ultimo argumento pergunta se você quer desativar todos os objetos exceto o objeto que está usando esse código.
Activate:
Os argumentos são os mesmos, porém, não existe o sexto argumento. Repare que eu coloquei uma margem extra de 96 pixels para fora da view. Isso serve para evitar que objetos "apareçam" tarde de mais ou cedo de mais na view. Aumente se achar necessário.
Espero ter ajudado... Dúvidas é só falar.
Re: Checar objetos e fora da room
no caso vai dar um cast desgramado pra iniciar o jogo neh ?
Tipo, esperarei os 1 milhao de objs serem criados pra poder mexer pq até a lá o FPS será quase nulo u.u
Mas vlw, ja ta bem legal agr huahsuahs
Tipo, esperarei os 1 milhao de objs serem criados pra poder mexer pq até a lá o FPS será quase nulo u.u
Mas vlw, ja ta bem legal agr huahsuahs
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Checar objetos e fora da room
Só o for resolveria nessa situação por ser significativamente mais rápido, mas como você disse que é inviável, o jeito é arcar com as consequências. XD
Você pode improvisar deixando a tela preta e colocar um "Carregando..." no canto da tela só pra disfarçar.
Você pode improvisar deixando a tela preta e colocar um "Carregando..." no canto da tela só pra disfarçar.
Re: Checar objetos e fora da room
eu já coloquei o carregando, eu to usando uma room 3200x3200 q da 10000 instancias e ja demora sahushaush mas ta de boa .
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Checar objetos e fora da room
Objetos em grid costumam ser melhor gerenciados por arrays, ou globais ou de um objeto-controle. Provavelmente é o que o willy fez, mas eu não vi a engine.
Olha, provavelmente é possível ir criando a grid à medida que a room vai sendo revelada. A primeira ideia realmente é criar tudo de uma vez e viver confortável, mas se isso está gerando problemas, talvez dê pra encontrar uma saída "on the fly" (não consegui traduzir essa expressão, mas como é pra você, nem tentei muito).
Pra achar a saída, temos que conhecer os critérios. O objeto[0, 1] depende do tipo de objeto [0, 0]? Mole, podemos ter essa informação na array. Depende de alguma variável do objeto acima ou abaixo? Podemos criar novas arrays, alimentadas pelos objetos. Os objetos podem mudar ao longo do jogo e você quer que os novos objetos não notem essa mudança? Bom, podemos ter uma array pra segurar a situação inicial, mas já começa a complicar.
Agora, se os objetos estão lá só pra aparecer na tela, a ideia dos tiles pode ser uma boa, viu?
Olha, provavelmente é possível ir criando a grid à medida que a room vai sendo revelada. A primeira ideia realmente é criar tudo de uma vez e viver confortável, mas se isso está gerando problemas, talvez dê pra encontrar uma saída "on the fly" (não consegui traduzir essa expressão, mas como é pra você, nem tentei muito).
Pra achar a saída, temos que conhecer os critérios. O objeto[0, 1] depende do tipo de objeto [0, 0]? Mole, podemos ter essa informação na array. Depende de alguma variável do objeto acima ou abaixo? Podemos criar novas arrays, alimentadas pelos objetos. Os objetos podem mudar ao longo do jogo e você quer que os novos objetos não notem essa mudança? Bom, podemos ter uma array pra segurar a situação inicial, mas já começa a complicar.
Agora, se os objetos estão lá só pra aparecer na tela, a ideia dos tiles pode ser uma boa, viu?
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Checar objetos e fora da room
eles estarão lá apenas para aparecer sim
Eu n faço ideia de como fazer isso por array pq além de o proximo obj a ser criado depender do outro, tem um obj q passa uma informação pro próximo a ser criado usando with instance_create. e n sei como transformar esses objs em tile *-*
Eu n faço ideia de como fazer isso por array pq além de o proximo obj a ser criado depender do outro, tem um obj q passa uma informação pro próximo a ser criado usando with instance_create. e n sei como transformar esses objs em tile *-*
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Checar objetos e fora da room
Use a ideia do saim com a minha e seja feliz!saim escreveu:Olha, provavelmente é possível ir criando a grid à medida que a room vai sendo revelada.
Faça o seguinte:
1 - No step do objeto, faça como estava fazendo antes, ou seja, checando se já foi criado ou não. Porém, acrescente a condição de que o mesmo está dentro da view (acrescente uma margem também!). Dessa forma, não será criado tudo de uma única vez.
2 - Acrescente o sistema de ativar e desativar instâncias.
Se tudo correr como esperado, os objetos não serão criados de uma só vez - evitando a tela de "carregando" - e mesmo que tenha milhões de instâncias na room, o FPS permanecerá alto pois apenas as instâncias dentro da view estarão ativas.
Re: Checar objetos e fora da room
Ahhh, entendi kkkkkkk como n pensamos nisso cara kkkkkkkk agora tudo ficou claro shauhsaush
vlw saim e vlw willy
vlw saim e vlw willy
Zero.- Data de inscrição : 19/08/2010
Reputação : 47
Número de Mensagens : 1300
Prêmios :
x 0 x 0 x 0
x 1 x 0 x 0
x 0 x 0 x 0
Re: Checar objetos e fora da room
Só detalhando um pouco, a idéia das arrays. O que eu sugiro que você faça é criar uma array que sirva como um mapa de objetos. Cada objeto vai ocupar um índice da array. Se os objetos medissem 1x1, a posição na tela seria a mesma posição da array. Você pode ter muitas arrays, uma pra cada informação que julgar importante. Por exemplo, saber se o objeto já foi criado.
Na hora de ativar/desativar a tela, você repopula a array. "Repopula" é uma palavra que eu inventei agora, não sei se existe de verdade. Tipo, no create de um controle, você pode fazer um lance assim:
Na hora de ativar/desativar a tela, você repopula a array. "Repopula" é uma palavra que eu inventei agora, não sei se existe de verdade. Tipo, no create de um controle, você pode fazer um lance assim:
- Código:
// lar e alt são largura e altura da array
// lado é o tamanho dos objetos
lado := 32;
lar := ceil(room_width / lado); alt := ceil(room_height / lado);
var i, j;
for (i :=0; i < lar; i += 1){
for (j :=0; j < alt; j += 1){
foi_criado[i, j] := false;
objeto[i, j] := noone; // só declarando a array, sem ninguém ainda
}
}
// pronto, a array "foi_criado" armazena se o objeto já existe ou não.
// é importante saber, também, o tanto da array que a view mostra.
lar_na_view := ceil(view_wview[0] / 32) + 2; // +2 é pra ter um além à esquerda e outro à direita
alt_ne_view := ceil(view_hview[0] / 32) + 2;
- Código:
var i, j, primeiro_x, primeiro_y, ind_x, ind_y;
primeiro_x := max(floor(view_xview / 32) - 1, 0); // a posição da view na array
primeiro_y := max(floor(view_yview / 32) - 1, 0); // -1 é pra pegar o da esquerda, max é pra não pegar valor negativo
for (i:= 0; i < lar_na_view; i += 1){
for (j := 0; j < alt_na_view; j += 1){
// define o índice das arrays a ser usado
ind_x := primeiro_x + i;
ind_y := primeiro_y + j;
if (foi_criado[ind_x, ind_y] == false){
roda_script_criar(ind_x, ind_y); // não sei o que colocar aqui
foi_criado[ind_x, ind_y] := true;
}
}
}
- Código:
var ind_x, ind_y;
ind_x := argument0; ind_y := argument1; // só pro script entender onde ele está
if (ind_x == 0){ // se é a primeira coluna
if (ind_y == 0){ // se é a primeira linha
objeto[ind_x, ind_y] := instance_create(lado * ind_x, lado * ind_y, obj_branco); // o primeiro é branco
}
else { //se é a primeira coluna, mas não é a primeira linha
if (objeto[ind_x, ind_y - 1] . object_index == obj_branco){ // se acima tem um branco
objeto[ind_x, ind_y] := instance_create(lado * ind_x, lado * ind_y, obj_preto);
}
else { // se acima NÃO tem um branco
objeto[ind_x, ind_y] := instance_create(lado * ind_x, lado * ind_y, obj_branco);
}
}
else { // se não é a primeira coluna (aí não interessa saber a linha)
if (objeto[ind_x - 1, ind_y] . object_index == obj_branco){ // se à esquerda tem um branco
objeto[ind_x, ind_y] := instance_create(lado * ind_x, lado * ind_y, obj_preto);
}
else { // se à esquerda NÃO tem um branco
objeto[ind_x, ind_y] := instance_create(lado * ind_x, lado * ind_y, obj_branco);
}
}
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Tópicos semelhantes
» Objecto que sai fora da room
» Criar objetos fora da room de acordo com a música
» Posicionar objetos fora da room. Colado na tela.
» [RESOLVIDO]Checar quantos objetos na room
» Se os objetos obj_carta1,object10 não existirem na room, ir para a próxima room.
» Criar objetos fora da room de acordo com a música
» Posicionar objetos fora da room. Colado na tela.
» [RESOLVIDO]Checar quantos objetos na room
» Se os objetos obj_carta1,object10 não existirem na room, ir para a próxima room.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|