Bem-vindo: Qui, 28 de Março 2024, 16:49 Pesquisa avançada

Godot Engine: Desenvolvimento de jogos no Linux

Escreveu alguma aplicação ou script que quer partilhar? Ou conhece algo que quer partilhar? Sabe alguma linguagem de programação e quer partilhar esse conhecimento com um tutorial? Tem alguma dúvida em alguma linguagem? Então este é o sítio certo.

Re: Godot Engine: Desenvolvimento de jogos no Linux

Mensagempor Bitetti » Qui, 15 de Maio 2014, 2:04

Feito o save de configurações. Pronto, agora não preciso mais ficar ouvindo a musica da fase a fada F6 de teste.

Uma coisa que achei curiosa, segui o tuto da GODOT https://github.com/okamstudio/godot/wiki/tutorial_encrypting_savegames coloquei uma senha lá e na hora de ler os campos voltavam sempre nulos.
Bom sempre achei a encriptação para esse tipo de coisa algo pouco relevante. salvo que se queira evitar trapaceiros, mas esses sempre existirão, se eles acham graças num jogo sem desafio n vou tentar entender.

No fim das contas usei a função sem encriptação mesmo e funcionou.

Ele cria a pasta .NomeDoJogo na sua pasta de usuário com o arquivo que vocẽ nomeia na função.
No demais é um simples fopen do C transplantado para o ambiente da GDScript, ainda sou mais fã de Lua, onde dá p vc mapear a memória e salvar o estado do programa.

Código: Selecionar todos
func carregaConfig():
   var file = File.new()
   var err = file.open("user://easteregg1.bin",File.READ)
   if err == OK:
      print("lendo arquivo de configuracao")
      if not file.eof_reached():
         if file.get_line().to_int() <= playerDT.GAME_VERSION:
            if not file.eof_reached():
               if file.get_line() == "True":
                  playerDT.tocarMusica = true
               else:
                  playerDT.tocarMusica = false
            if not file.eof_reached():
               if file.get_line() == "True":
                  playerDT.isDebug = true
               else:
                  playerDT.isDebug = false
      file.close()
      get_node("configuracoes/tocar_musicas").set_pressed(playerDT.tocarMusica)
      get_node("configuracoes/mostrar_fps").set_pressed(playerDT.isDebug)
   

func saveConfig():
   var file = File.new()
   var err = file.open("user://easteregg1.bin",File.WRITE)
   if err == OK:
      var saves = ["True","True"]
      if not playerDT.tocarMusica:
         saves[0] = "False"
      if not playerDT.isDebug:
         saves[1] = "False"
      
      file.store_line( str(playerDT.GAME_VERSION) ) # salva versao do game para nao conflitar arquivos posteriormente
      file.store_line( saves[0] )
      file.store_line( saves[1] )
      file.close()
Avatar do usuário
Bitetti
 
Mensagens: 875
Registrado em: 03 Janeiro, 2012
Localização: São Paulo

Re: Godot Engine: Desenvolvimento de jogos no Linux

Mensagempor Bitetti » Sex, 16 de Maio 2014, 11:07

Imagem

Terminando a parte de envio de feedback

Usei um modelo básico de um comentário de blog, na verdade estou salvando ele num blog que uso de portafolio hospedado la nos servidores da RedHat. Opa, mais uma logo pros créditos.

O único problema é não ter visto uma função na GDScript para codar a string em urlcode e eu fazer função disso na mão é muito chato.

Código PHP usando a engine do Wordpress:
Código: Selecionar todos
if (isset($_GET['nome']) &&  isset($_GET['email']) && isset($_GET['commentbody']) )
{
   $headers = apache_request_headers();

   $tags = array(
      'a' => array(
         'href' => array(), 'title' => array()
      ),
      'br' => array(), 'em' => array(), 'strong' => array(), 'b' => array(), 'i' => array()
   );

   $nome = wp_kses(sanitize_text_field($_GET['nome']),$tags);
   $site = wp_kses(sanitize_text_field($_GET['site']),$tags);
   $email = wp_kses(sanitize_text_field($_GET['email']),$tags);
   $comment = wp_kses(sanitize_text_field($_GET['commentbody']),$tags);
   $type = wp_kses(sanitize_text_field($_GET['commenttype']),$tags);

   $agent = "desconhecido";
   if (isset($headers))
   {
      if (isset($headers['User-Agent']))
         $agent = $headers['User-Agent'];
   }

   $pID = get_page_by_title( "wwpegg1" )->ID;

   $data = array (
      'comment_post_ID' => $pID,
      'comment_author' => $nome,
      'comment_author_email' => $email,
      'comment_author_url' => $site,
      'comment_content' => $comment,
      'comment_type' => $type,
      'comment_parent' => get_page_by_title( "Aplicações" )->ID,
      'user_id' => 1,
      'comment_author_IP' => $_SERVER['REMOTE_ADDR'],
      'comment_agent' => $agent,
      'comment_date' => current_time('mysql'),
      'comment_approved' => 1,
   );

   wp_insert_comment($data);

}


[EDIT] Fazendo os testes agora descobri que esqueci alguns porens:
ao enviar uma requisição o servidor me mandou o código 301 - redirect.
Ou seja, tenho q ler a resposta e enviar a requisição de novo.

A GODOT precisa urgentemente de um banco de código, ao mudar de Lua para GDScript pode se ter ganho em performance, mas perderam uma comunidade madura.

Bom, é sexta de noite... #PARTIUCERVEJA
Avatar do usuário
Bitetti
 
Mensagens: 875
Registrado em: 03 Janeiro, 2012
Localização: São Paulo

Re: Godot Engine: Desenvolvimento de jogos no Linux

Mensagempor Bitetti » Sáb, 17 de Maio 2014, 15:06

A respeito do meu ultimo comentário, reforço que a GODOT precisa de um banco de código logo.
Achei a raiz do meu problema, eu havia ignorado alguns cabeçalhos HTTP, coisa que geralmente não nos preocupamos quando usamos APIs mais sofisticadas como CURL e etc.

Eu recebia o sinal de redirect do servidor (301) e esquecia de pedir para o mesmo manter a conexão ativa (Keep-Alive) ai para o servidor era sempre um pedido novo que estava sendo feito.
Corrigi isso, acrescentei os headers que faltavam e implementei um loop na função "MEGAZORD" de envio:

Código: Selecionar todos
const url_form = ["192.168.1.100","/pessoal/lab/php/aplicacoes/wwpegg1/"]
 
var sendForm = Thread.new()
 
func bg_form(url):
   var html = ""
   var err=0
   var http = HTTPClient.new()
   var err = http.connect(url[0],80)
   assert(err==OK)
   
   while( http.get_status()==HTTPClient.STATUS_CONNECTING or http.get_status()==HTTPClient.STATUS_RESOLVING):
      http.poll()
      print("Connecting... http://" + url[0] + url[1] )
      OS.delay_msec(500)
   
   assert( http.get_status() == HTTPClient.STATUS_CONNECTED )
   
   var headers=[
      "User-Agent: Mozzila/1.0 (Godot)",
      "Accept: */*",
      "Connection: keep-alive",
      "Host: " + url[0]
   ]
   
   var code = 0
   var tentativas = 0
   var dt = url[1]
   while code != 200:
      # fora se algo nao estiver certo
      tentativas += 1
      if tentativas > 2:
         call_deferred("bg_form_fail")
         return false
         
      err = http.request(HTTPClient.METHOD_GET,dt,headers)
      assert( err == OK )
      
      while (http.get_status() == HTTPClient.STATUS_REQUESTING):
         http.poll()
         print("Requesting..")
         OS.delay_msec(500)
      
      assert( http.get_status() == HTTPClient.STATUS_BODY or http.get_status() == HTTPClient.STATUS_CONNECTED )
      
      if (http.has_response()):
         var headers = http.get_response_headers_as_dictionary()
         code = http.get_response_code()
         print("code: ",http.get_response_code())
         
         if code==301:
            var location = headers.Location
            print("Location: ", location)
            if location.find("https://")>-1:
               location = location.substr(9,location.length()-8)
            else:
               location = location.substr(8,location.length()-7)
            var p = location.find("/")
            location = location.substr(p,location.length()-p)
            #print("Location: ", location)
            dt = location
      
   call_deferred("bg_form_done")
   return true
 
func bg_form_fail():
   pass
 
func bg_form_done():
   get_node("configuracoes/result").set_text("Dados recebidos")
 
 
const hexCD = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"]
const validURL = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "
 
func toHex(cd):
   var a = (cd&0xf0) >> 4
   var b = cd&0x0f
   return "%" + hexCD[a] + hexCD[b]
 
func urlEncode(s):
   var ret = ""
   for i in range(s.length()):
      var c = s.substr(i,1)
      var cd = c.ord_at(0)
      if validURL.find(c)>-1:
         if c==" ":
            c = "+"
         ret += c
      else:
         ret += toHex(cd)
   return ret
   
func enviaForm():
   var nome = urlEncode( get_node("configuracoes/nome").get_text() )
   var email = urlEncode( get_node("configuracoes/email").get_text() )
   var site = urlEncode( get_node("configuracoes/site").get_text() )
   var opiniao = urlEncode( get_node("configuracoes/opiniao").get_text() )
   var uri = url_form[1]+"?nome="+nome+"&email="+email+"&site="+site+"&commentbody="+opiniao
   
   get_node("configuracoes/nome").hide()
   get_node("configuracoes/email").hide()
   get_node("configuracoes/site").hide()
   get_node("configuracoes/opiniao").hide()
   get_node("configuracoes/enviar").hide()
   get_node("configuracoes/result").show()
   get_node("configuracoes/result").set_text("Enviando...")
   
   sendForm.start( self, "bg_form", [url_form[0],uri] )
 
func _on_enviar_pressed():
   enviaForm()


Well done
Imagem
Avatar do usuário
Bitetti
 
Mensagens: 875
Registrado em: 03 Janeiro, 2012
Localização: São Paulo

Re: Godot Engine: Desenvolvimento de jogos no Linux

Mensagempor Bitetti » Dom, 18 de Maio 2014, 16:48

Preparei as funções que abrem as páginas de referência.
A GODOT pede o caminho do aplicativo a ser aberto e um array com os parâmetros. No entanto não sei se fiz do melhor geito para o Linux (sugestôes são bem-vindas).
Código: Selecionar todos
func _on_pag1_pressed():
   if OS.has_environment("%windir%"):
      OS.execute("C:\\Windows\\System32\\cmd.exe",["start","http://www.wildwitchproject.com/"],false)
   else:
      OS.execute("/usr/bin/gnome-open",["http://www.wildwitchproject.com/"],false)


func _on_pag2_pressed():
   if OS.has_environment("%windir%"):
      OS.execute("C:\\Windows\\System32\\cmd.exe",["start","http://www.facebook.com/wildwitchproject"],false)
   else:
      OS.execute("/usr/bin/gnome-open",["http://www.facebook.com/wildwitchproject"],false)
Avatar do usuário
Bitetti
 
Mensagens: 875
Registrado em: 03 Janeiro, 2012
Localização: São Paulo

Re: Godot Engine: Desenvolvimento de jogos no Linux

Mensagempor Luis Cardoso » Dom, 18 de Maio 2014, 22:03

Se pretende abrir um browser para carregar a página, que tal fazer uso do:

/usr/bin/x-www-browser url


Com este método, verá que pode ser aplicado no Gnome, KDE, Openbox (LXDE, Razor-Qt, LXQt), Xfce, e17, etc, etc... Tal como pode ser visto aqui: HOWTO/DefaultWebBrowser - Debian Wiki
ImagemImagem
«Escolhe um trabalho de que gostes, e não terás que trabalhar um só dia na tua vida» - Confúcio
Avatar do usuário
Luis Cardoso
Redator
 
Mensagens: 10455
Registrado em: 26 Maio, 2011
Localização: Portugal

Re: Godot Engine: Desenvolvimento de jogos no Linux

Mensagempor Bitetti » Seg, 19 de Maio 2014, 11:34

Vlw Luis ardoso, esse comando é bem útil.

Resolvi as últimas pendências essa semana, alguns erros estranhos, tipo chamar um objeto na árvore de cena que está lá mas por script ele não aparece. Parece estranho mas ocorre toda vez que troco de cena. Estou ralando com o texto para isso para enviar lá para a GODOT como issue.

Fora isso... downloaders prontos (mas acho q vou mudar a arte)
Imagem
Avatar do usuário
Bitetti
 
Mensagens: 875
Registrado em: 03 Janeiro, 2012
Localização: São Paulo

Re: Godot Engine: Desenvolvimento de jogos no Linux

Mensagempor Bitetti » Seg, 26 de Maio 2014, 11:11

Imagem

Fase final, esse é o ponto do objetivo do jogo, a parte agora parece legal mas é meio chata: Montar um labirinto complexo e gostoso de andar e calcular os recursos para passar de fase (e jogar muitas vezes o negocio parece divertido no começo, mas massante após a 10ª vez)
Estou preparando uma postagem dedicada a produção de levels em 2D só usando esse modelo que está saindo.

No próximo teste com a GODOT usarei um planejamento maior.
Avatar do usuário
Bitetti
 
Mensagens: 875
Registrado em: 03 Janeiro, 2012
Localização: São Paulo

Re: Godot Engine: Desenvolvimento de jogos no Linux

Mensagempor JOPAGO » Seg, 26 de Maio 2014, 16:45

Cara q legal essa sua montagem de jogo.
To com vontade de montar um jogo tbm, ou quem sabe, contribuir com um :)
A biblioteca SDL é boa tbm para jogos nao? que vc recomenda?
Avatar do usuário
JOPAGO
 
Mensagens: 25
Registrado em: 22 Novembro, 2013

Re: Godot Engine: Desenvolvimento de jogos no Linux

Mensagempor Bitetti » Seg, 26 de Maio 2014, 17:55

JOPAGO (26-05-2014, 16:45) escreveu:Cara q legal essa sua montagem de jogo.
To com vontade de montar um jogo tbm, ou quem sabe, contribuir com um :)
A biblioteca SDL é boa tbm para jogos nao? que vc recomenda?


Bom vou dar um adentro aki já que "trollei nível epic" nesta thread o nuno_nunes postou sobre a GODOT engine de desenvolvimento para Linux (rWindows e Mac) e eu embarquei num projeto de teste que é esse q vc ta vendo desenrolar ai. Ou seja oque esta sendo avaliado aqui é a GODOT.
Esse jogo eu já tinha o esquema dele pronto, inclusive rodando ( http://www.wildwitchproject.com/ e na barra a direita vc vai ver um Konami Code, é só digitar ele) como um easter egg, ele foi projetado para ser portado dentro da engine que vai rodar no jogo principal que esta descrito no blog, tipo ele vai rodar num fliperama dentro da taverna no meio do jogo, que usa o motor OGRE e LibRocket. Ele foi escolhido para eu não perder tempo pensando e sair logo testando os recursos da GODOT "no pau".

Ficaria bem estranho eu recomendar a SDL numa thread para a GODOT, apesar de que ela ainda supre as necessidades, mas vai exigir alguns conhecimentos mais aprimorados de quem usa, diferente da GODOT que pretende ser um "clique arraste" quando crescer (tipo Unity de pobre).
Vou citar oque eu lembro da SDL como comparação com a GODOT (oque eu lembro, ok gente).
A SDL não vem com engine de fisica embutida, já a GODOT vem.
A SDL dá suporte a um montao de medias, a GODOT vc tem que converter.
A SDL é portável até p WII-U e geladeira, a GODOT tem uns templates p facilitar. Mas as duas vc tem q compilar p atingir um resultado especifico.

Se vc quer resultado rápido p nao desanimar e ainda n tem experiencia com programação de games, use a GODOT. Se tem tempo, uma equipe de preferencia, e vontade de mexer no barro da criação vá de SDL.

Eu to preferindo a GODOT, rápida e prática. Inclusive vo focar nela em mais projetos e em aulas de CG.

[off] :doh: JOPAGO te ponho na minha lista negra, ao entrar no site da SDL pra confirmar o quanto há de defasagem dos meus conhecimentos e da propria engine me deparei c isso http://store.steampowered.com/app/51060 e vou fica um poko + pobre essa noite.
Avatar do usuário
Bitetti
 
Mensagens: 875
Registrado em: 03 Janeiro, 2012
Localização: São Paulo

Re: Godot Engine: Desenvolvimento de jogos no Linux

Mensagempor JOPAGO » Seg, 26 de Maio 2014, 19:57

Nao entendi, esse jogo do steam foi feito em SDL? Oo

Vo tentar o godot mesmo. Nao tenho muita pratica com programação, mas tbm nao tenho preguiça, mas acho q vai demoooooorar demais pra aprender e to sem tempo.
Vo no godot e quem sabe no futuro vou me aprimorando.

Edit:
Tenho q baixar o binario e instalar? meu ubuntu é 14.04 64 bits
Avatar do usuário
JOPAGO
 
Mensagens: 25
Registrado em: 22 Novembro, 2013

AnteriorPróximo

Voltar para Scripts, programação e aplicações em desenvolvimento

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 61 visitantes