Guia de implementação de games 2D no estilo plataforma

119 views
Skip to first unread message

Thiago Franco Moraes

unread,
May 23, 2012, 12:32:20 PM5/23/12
to python-gam...@googlegroups.com
Olá pessoal,

Acabei de ver esse link no reddit:
http://higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-platformers/
. Acredito que seja útil.

Joao S. O. Bueno

unread,
May 23, 2012, 10:36:27 PM5/23/12
to python-gam...@googlegroups.com
2012/5/23 Thiago Franco Moraes <toton...@gmail.com>:
> Olá pessoal,
>
> Acabei de ver esse link no reddit:
> http://higherorderfun.com/blog/2012/05/20/the-guide-to-implementing-2d-platformers/

Opa --nossa, tinha até esquecido dessa lista.

Bacana o artigo.

Tem alguem com algum projetinho em andamento?

Eu queria ver se até agosto conseguia chegar com um joguinho pronto em
Python - com começo, meio, fim e instalador.

(Até mandei uma palestra pro FISL com o tema, se ela for aprovada,
mais u=m incentivo - mas não tem por que não fazer).

Alguém mais na onda de começar alguma coisa cuja maior pretensão seja:
ter código "bem feito", e "estar pronto", entre 2 e 3 semanas de hoje?


js
-><-


> . Acredito que seja útil.
>
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo "python-gamedev-brasil" dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para python-gam...@googlegroups.com.
> Para cancelar a inscrição nesse grupo, envie um e-mail para python-gamedev-b...@googlegroups.com.
> Para obter mais opções, visite esse grupo em http://groups.google.com/group/python-gamedev-brasil?hl=pt-BR.
>

Apoena Machado Cunha

unread,
May 24, 2012, 1:13:42 AM5/24/12
to python-gam...@googlegroups.com
MUito bom o Link mesmo Thiago! E valeu por ressucitar a lista.

João, eu dei uma parada, mas estava fazendo um jogo plataforma, básico, em python, com panda3d.
Mas dá muito trabalho.
Me convenci de que o que deve ser feito, agora, é "qualquer jogo pequeno..que de para ficar pronto"

Vamos tentar fazer algo juntos!

Abraço!

Apoena

jeferson perito

unread,
May 24, 2012, 8:48:39 AM5/24/12
to python-gam...@googlegroups.com
Opa... se precisarem de ajuda, podem contar comigo! comecei a estudar faz alguns meses pygame, mas depois vi que nao ia dar tempo na epoca, agora to voltando a estudar alguns materiais relacionado aos conceitos de jogos.
Atenciosamente,

Jeferson Viana Perito

www.jefersonperito.com

Alex Fernando Ferreira

unread,
May 24, 2012, 2:33:31 PM5/24/12
to python-gam...@googlegroups.com
o grande problema é tempo... sempre que começo alguma coisa, vem as provas da facu, o trabalho aperta...
parece uma coisa... preciso de ferias isso sim, ai quem sabe de pra fazer algo concreto.

        ^
     .     .
      Linux
   /    -    \
  Choice.of.the
.Next.Generation.
Slackware Forever...



Em 24 de maio de 2012 09:48, jeferson perito <jefp...@gmail.com> escreveu:
aio de 2012 02:13, Apoe

leonardo finizola

unread,
May 24, 2012, 2:52:02 PM5/24/12
to python-gam...@googlegroups.com

Fiquei animado tambem!
Preciso de tempo habil para o projeto!

Vou abandonar(temporariamente) o c e voltar com o velho amigo python

Leonardo Finizola

Fernando Mondo

unread,
May 24, 2012, 4:05:47 PM5/24/12
to python-gam...@googlegroups.com
bah, me inscrevi nesta lista, e nunca recebi nada, achei que estive-se abandonada, hahaha
eu tambem tinha visto este artigo graças ao bruno do PontoV.

muito bacana.

Eu tenho um projetinho abandonado aqui e já estou retomando, vou ver de dou uma revivida na lista então...hehehe

Fernando Mondo

unread,
May 29, 2012, 2:52:00 PM5/29/12
to python-gam...@googlegroups.com
Olha Só, estou tentando resolver Colisão com Tiles, alguém já implementou?

estou usando o o tradicional método de ter um Vetor2d com a velocidade (e consequentemente direção) e no final do loop eu ajusto esta velocidade caso esteja colidindo com algum tile.
O problema é que  minha lógica esta ruim pois quando meu personagem anda em diagonal (num pulo por exemplo) eu não sei o quando devo reduzir da velocidade.

estas imagems demonstram bem, a linha vermelha demonstra o quanto meu jogador iria se movimentar caso não estivesse tiles Solidos, e o quadrado amarelho mostra quais os tiles que eu preciso testar para ver se são sólidos:
então caso eu encontre algum solido eu devo reduzir meu vetor de velocidade para encostar no tile e não sobrepor.
é aí que eu travo, mesmo tendo a posição do tile eu não sei o quanto devo tirar da velocidade.

tipo este pseudo código:

if (tile.Solido())
vector2d playerVelocity = player.velocidade;
vector2d playetPosition = player.position;
float playerWidth =  player.width;
float playerHeigth =  player.heigth;
vector2d tileposition =    tile.position;
float  tileWidth =  tile.width;
float  tileHeigth =  tile.heigth;

//e agora?

}


Se alguem souber um bom tutorial, pois já li vários e não consegui enterder o que tenho que fazer



Imagem inline 1Imagem inline 3


image.png
image.jpeg

Kao Félix

unread,
May 29, 2012, 3:08:42 PM5/29/12
to python-gam...@googlegroups.com
Ao invés de mudar a velocidade, tu pode simplesmente resetar a posição do teu player de modo que a borda dele que bate do tile fique exatamente na posição da borda do tile em que ele está batendo. Dessa forma mesmo que a velocidade dele se mantenha a mesma, ele vai ficar parado no lugar. O único problema dessa solução é se a tua velocidade for tão grande que em um step da tua engine, o personagem atravesse o tile e a colisão não seja detectada, mas isso aconteceria também com a mudança de velocidade que tu queria. Resolver isso já é mais complicado e só é necessário se tu tem objetos se movendo rápido o bastante pra esse problema acontecer, então eu começaria por essa solução simples de se ele colide num tile, reseta a posição dele pra que fique grudado no tile mas sem bater, sem precisar mexer na velocidade.

Kao Félix

image.png
image.jpeg

Fernando Mondo

unread,
May 29, 2012, 3:33:23 PM5/29/12
to python-gam...@googlegroups.com
mas aí esta um dos pontos. imagina que o quadrado laranja é o jogador e o de preto é um tile sólido
a seta é a direção que eu deveria ir, mas como o tile é solido eu teria que me possicionar na posição como mostra a segunda figura.
se eu fosse resetar o vetor no euxo Y eu ficaria abaixo do tile e se fosse resetar no eu X ficaria ao lado, se fosse resetar nas duas fidaria como na ultima figura. De todas as formas  estaria errado. é neste ponto que meu algoritimo falha.
 Imagem inline 2
image.png
image.jpeg
image.png

Kao Félix

unread,
May 29, 2012, 4:20:40 PM5/29/12
to python-gam...@googlegroups.com
Entendi o problema. Pois é, não é tanto como parar o personagem no lugar, é mais em como encontrar o lugar da colisão, certo? Tem provavelmente vários jeitos de resolver isso, mas é difícil sem parar por um tempo com caneta e papel pra achar uma solução matemática sucinta. Mas tenta desenhar no papel os possíveis casos e as variáveis que tu tem disponíveis, por exemplo o centro do tile, o centro do personagem, o vetor de velocidade, o angulo desse vetor com os eixos cartesianos (já que lados do tile são sempre paralelos). A idéia é achar que relação essas coisas tem com o lado do tile em que o personagem está, daí tu sabe como alinhar. Também, na hora de alinhar, tu teria que parar em cima do caminho indicado pelo teu vetor de velocidade.

Eu não tenho tempo pra tentar achar uma solução completa. Talvez alguém aqui na lista queira resolver esse puzzle geométrico, mas certamente se tu mesmo tentar resolver vai aprender muito mais sobre o assunto. Detecção de colisão não é fácil mesmo, tem que parar um tempo e quebrar a cabeça. Ou usar alguma engine física pronta tipo a Chipmunk, mas igual tu vai ter que parar um tempo pra entender como a engine em si funciona.
image.png
image.jpeg
image 2.png

Marcio Duarte

unread,
May 29, 2012, 4:50:55 PM5/29/12
to python-gam...@googlegroups.com
Pelo o que eu entendi, o problema é exatamente a velocidade se maior que um tile por frame. 

E se eu entendi bem, vc precisa não só determinar o tile final do movimento mas o conjunto de tiles por onde ele passaria naquele movimento.

A partir dai vc itera por esses tiles, na ordem do movimento, testando se o tile seguinte é sólido. Se não for, vc move. Se for vc sai da iteração, e o player irá ficar na posição correta.

A dificuldade é vc determinar esses tiles, dependendo do angulo do vetor. Vc pode usar seno e co-seno pra isso. Não sei se o que estou falando faz sentido, mas vamos a um pseudo código:

tileAtual = (1, 1)
velocidade = 3

angulo = math.radians(45)  #em relação o eixo horizontal

movimentoHorizontal = math.sin(angulo) * velocidade
movimentoVertical = math.cos(angulo) * velocidade

movimentos = []
for i in range(tileAtual[0], tileAtual[0] + movimentoHorizontal):
    movimentos.append((tileAtual[0], i))

for i in range(tileAtual[1], tileAtual[1] + movimentoVertical):
    movimentos.append((tileAtual[1], i))

for index, movimento in enumerate(movimentos):
    if tile(movimentos[index + 1]).solido:
        break
    player.move(tile(movimento))


Algo assim... é isso que vc precisa ou não tem nada a ver? :D

2012/5/29 Kao Félix <kcf...@gmail.com>
image.png
image.jpeg

Fernando Mondo

unread,
May 30, 2012, 9:32:45 AM5/30/12
to python-gam...@googlegroups.com
isto funcionaria de o movimento fosse feito por tiles e não livremente.
Para jogos de Rpg como Final Fantasy é fácil de fazer mais ou menos como tu disse, mas se eu quero um movimento mais fluido como qualquer jogo de plataforma (Mário, Megaman) ou mesmo Chrono Trigger onde você pode movimentar poucos pixel ao invés de um tile inteiro, fica mais complicado.

Se eu disser que estou a meses com o projeto parado por conta disso...
Mas não espero que alguem Tente resolver, pois é um problema matemático complexo. Eu pensei que talvez algum de vocês tivesse já tentado fazer um jogo deste tipo e encontrado na internet o algorítimo pronto.
Eu até encontrei alguns mas não consegui entender e utilizar.
image.png
image.jpeg

mrangel

unread,
Sep 15, 2012, 10:58:08 PM9/15/12
to python-gam...@googlegroups.com
Alguém já desenvolveu algum jogo pra Android em Python ? Se já, qual(is) biblioteca(s) usou(aram) ?

Valeu !!
--
Marcos Rangel Júnior

Bacharel em Ciência da Computação - UCAM -Campos
Graduado em Tecnologia de Automação Industrial - CEFET-Campos
Administrador da lista python-gamedev-brasil

Joao S. O. Bueno

unread,
Sep 16, 2012, 12:12:29 AM9/16/12
to python-gam...@googlegroups.com


2012/9/15 mrangel <mra...@gmail.com>

Alguém já desenvolveu algum jogo pra Android em Python ? Se já, qual(is) biblioteca(s) usou(aram) ?

Oi Marcos --

então - nunca desenvolvi pra Android - 
(e nem um jogo platfoma completo) 

Mas acredio que o que temos de melhor em Python que pode dar saida pra Aindroid (alemd e rodar em Linux, Windows, Mac e até Iphone)
é o framework Kivy!  - Dá uma olahda no Kivy.org !


  js
 -><- 

Valeu !!
--
Marcos Rangel Júnior

Bacharel em Ciência da Computação - UCAM -Campos
Graduado em Tecnologia de Automação Industrial - CEFET-Campos
Administrador da lista python-gamedev-brasil

--

mrangel

unread,
Sep 16, 2012, 12:27:02 AM9/16/12
to python-gam...@googlegroups.com
Valeu pela dica João, estou dando uma olhada ... 

Parece ser muito bom ..



2012/9/16 Joao S. O. Bueno <gwi...@gmail.com>
Reply all
Reply to author
Forward
0 new messages