Obrigado por visitar a The Game Makers Brasil Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais. |
Como criar a função instance_deactivate_region?
Como criar a função instance_deactivate_region?
Boa noite,gostaria do auxilio da comunidade para resolver um obstáculo. Estou desenvolvendo um jogo no Tululoo Game Maker ( HTML5 ) e estou convertendo o projeto para android via apache-cordova. O mesmo ( Tululoo Game Maker -TGM ) tem funcionalidades familiarizadas com a forma do Game Maker trabalhar ( propriamente dizendo o GM8 ) e ele tem a função para desativar instancias e tudo e também tenho como listar todas as instancias da room, mas gostaria de desativar somente as instancias fora da view. Tenho a posicao da view (x,y) e também a dimensão (w,h) e tenho como percorrer todas as instancias da room. Tentei logicas intuitivas para o caso mas nao cheguei a uma resposta que funcionasse. Minha pergunta é, como seria criar a função nativa do GM ( instance_deactivate_region ) dentro desses valores que posso obter mesmo estando em outro ambiente de desenvolvimento? Julgo que seja possível mas nao consegui estabelecer uma logica funcional ao percorrer as instancias. Ah o motivo e por rendimento do APK final. Está na seção GM pela similaridade das engines.
- Meu site: http://tulionascimento.com.br
Re: Como criar a função instance_deactive_region?
O cálculo levaria em consideração a origem da sprite e a bounding box. Cheguei neste resultado (testando no próprio GM)
Eu tava testando no GM5 (formatei o PC e não sei onde botei o 8 ), e na minha lógica eu precisaria adicionar o bbox_left e bbox_top nos xx e yy, só que por algum motivo, numa sprite simples de 32x32, o valor delas era maior do que 0
Código: Selecionar todos
var left, top, width, height, inside, notme;
left = argument0; top = argument1;
width = argument2; height = argument3;
inside = argument4; notme = argument5;
for(i=0;i<instance_count; i+=1) {
var obj, xx, yy, ww, hh, check;
obj = instance_id[i];
if (notme and obj.id == self) continue;
xx = obj.x - obj.sprite_xoffset;
yy = obj.y - obj.sprite_yoffset;
ww = obj.bbox_right - obj.bbox_left;
hh = obj.bbox_bottom - obj.bbox_top;
check = (
xx >= left and yy >= top and
xx+ww <= left+width and yy+hh <= top+height
);
if (!inside) check = !check;
if (check) instance_deactivate_object(obj);
}
Re: Como criar a função instance_deactive_region?
No GMS me ensinaram assim..
obj_player >> create events
create events alarm 0
obj_player >> create events
Código: Selecionar todos
alarm[0] = 1;
Código: Selecionar todos
instance_deactivate_all(true);
instance_activate_region(view_xview-500,view_yview-500,view_wview+768,view_hview+500,true)
alarm[0] = 0.5*room_speed;
......∩____∩............_______...
......| (• ◡•)| ノ\(❍ᴥ❍ʋ)..
Não seja uma cabrita selvagem "tutankhamun"
......| (• ◡•)| ノ\(❍ᴥ❍ʋ)..
Não seja uma cabrita selvagem "tutankhamun"
Re: Como criar a função instance_deactivate_region?
Muito obrigado Markituh e Gonzo pelas respostas.
Vendo a solução do Markituh, pensei em uma lógica e estruturei ela e funcionou bem
Como o Tululoo Trabalha nativamente no Javascript, alterei pelo objeto a estrutura de funcionamento do sistema porque não tive a paciência de saber o porque da função instance_deactive e a instance_destroy dar bugs esquisitos .
Ficou assim, criando o objeto obj_otimizar...
CREATE
STEP
Claro o código ainda precisa ser otimizado kk, mas está rodando. Ainda estou realizando testes também. Na internet nao achei qualquer material que fosse uma real resolução para esse problema, pois me parece que devido aos bugs da engine, ela foi abandonada. Está sendo bem didático fazer ela funcionar sem bugar kkk
Obrigado pela ajuda, e se alguém for utilizar e estiver com o mesmo problema, esse código resolve muito a questão de "lentidao" que acontece quando convertido para APK. O Jogo está rodando bem agora
A propósito, quando ele estiver mais estruturado, compartilho ele aqui
Vendo a solução do Markituh, pensei em uma lógica e estruturei ela e funcionou bem
Como o Tululoo Trabalha nativamente no Javascript, alterei pelo objeto a estrutura de funcionamento do sistema porque não tive a paciência de saber o porque da função instance_deactive e a instance_destroy dar bugs esquisitos .
Ficou assim, criando o objeto obj_otimizar...
CREATE
Código: Selecionar todos
listar = [obj_parede, obj_chao];
window.$objetos = [];
for( i in listar ){
lista = instance_list( listar[i] );
for( j in lista ){
$objetos.push({
depth_coord: [lista[j].depthstart, tu_depth[lista[j].depthstart].indexOf(lista[j])],
type_coord: [lista[j]._object_index_,tu_types[lista[j]["_object_index_"]].indexOf(lista[j])],
object: lista[j],
position: [lista[j].xstart, lista[j].ystart],
visibility: lista[j].visible
});
}
}
border = 2;
Código: Selecionar todos
for( i in $objetos ){
var obj = $objetos[i],
active = (
obj.position[0] > room_viewport_x - border &&
obj.position[0] < room_viewport_x + room_viewport_width + border &&
obj.position[1] > room_viewport_y - border &&
obj.position[1] < room_viewport_y + room_viewport_height + border
);
if( active ){
tu_types[obj.type_coord[0]][obj.type_coord[1]] = obj.object;
/*tu_types[obj.type_coord[0]][obj.type_coord[1]]["x"] = tu_types[obj.type_coord[0]][obj.type_coord[1]]["xstart"] = obj.position[0];
tu_types[obj.type_coord[0]][obj.type_coord[1]]["y"] = tu_types[obj.type_coord[0]][obj.type_coord[1]]["ystart"] = obj.position[1];
tu_depth[obj.depth_coord[0]][obj.depth_coord[1]].visible = obj.visibility;*/
tu_depth[obj.depth_coord[0]][obj.depth_coord[1]].visible = obj.visibility;
} else {
tu_types[obj.type_coord[0]][obj.type_coord[1]] = {};
tu_depth[obj.depth_coord[0]][obj.depth_coord[1]].visible = 0;
}
}
Obrigado pela ajuda, e se alguém for utilizar e estiver com o mesmo problema, esse código resolve muito a questão de "lentidao" que acontece quando convertido para APK. O Jogo está rodando bem agora
A propósito, quando ele estiver mais estruturado, compartilho ele aqui
- Meu site: http://tulionascimento.com.br
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes