PDA

Prikaži potpunu verziju : Pomoc oko pravljenja platformske igre


Stevvan
19.7.2007, 16:04
Skoro sam poceo da pravim platformsku igru, ali sam ubrzo naisao na problem na kome sam zakucan 2 dana i koji ne mogu da resim, niti da nadjem pomoc na nekim nasim i stranim forumima. Tacnije problem mi je napraviti kretanje preko platformi. Ono je delimicno uradjeno ali je puno bug-ova sto cete videti kada skinete igru. Ako treba source mogu i njega da postavim ali ne znam da li iko ovde poznaje python i pygame pa da bi mogao da mi pomogne. Btw, u folder nisam stavio Python25.dll posto ima 2 mb a ja imam dial-up pa mi je muka da kacim. Ako ne mozete da ga nadjete na netu recite mi pa cu da ga postavim na turboupload (Bio bih jako zahvalan nekome ko ima brz net i python25.dll pa da uradi to umesto mene:paranoia:).
Evo linka: http://d.turboupload.com/d/1949207/platform.rar.html
Znaci ako je neko vec imao iskustva sa platformskim igrama ili mozda ima ideju kako bi ovo moglo da se resi neka post-uje.

EclipsE
19.7.2007, 16:50
Dao si nam neki .py fajl a neam python i nemam pojma kako da ga pokrenem/kompajliram tako da ne mogu da ti kazem nista na osnovu toga al analiziracu source pa cemo da vidimo sta mozesh da uradish, mada gledaj ovako.

Igrac ima neku X i Y poziciju, naravno. Kad ide levo desno, samo mu menjash X poziciju, i ako dodje do sudara, vratish ga na mesto gde je bio prethodno, a da bi i ispalo malo lepse (da se igrac odbija kad se sudari) promenish mu brzinu po X osi, brzinaX = -brzinaX i josh moze * 0.5 da se ne odbije bash puno... Nego problem je skakanje po Y osi zbog toga sto ti ne mozesh bash da otkrijesh gde se igrac nalazi, tako da kad se igrac sudari, nemash pojma da li je on iznad pa treba da padne i da stoji na platformi, da li je on ispod pa je samo glavom udario u platformu itd. Zbog toga, treba malo pomoci. Samo da udjem u fotoshop da demonstriram...

http://img502.imageshack.us/img502/1940/platformce5.th.png (http://img502.imageshack.us/my.php?image=platformce5.png)

E sad, vidish ih u razlicitim mogucim polozajima, sa strane, odozgo i odozdo. Sve sto trebash da uradish jeste da pronadjesh njihove pozicije, tj. da li se nalaze unutar nekih plavih granica (na slici). Ne moraju da budu bash unutar njih, ali vazno je da bar malo ulaze u njih. I pomocu toga, znacesh sta da uradish... :D

Stevvan
19.7.2007, 17:20
Ijao ono sto sam poslao bio je upakohvan source koji sam postavljao na drugim forumima:boodala:Evo sada ispravan link: http://d.turboupload.com/d/1949297/platform.rar.html Imao sam i ja slicnu ideju ali nije mogla da se realizuje pojma nemam zasto (pokusao sam nekoliko puta i nije htelo verovatno iz razloga sto nastaje problem kada igrac ima koliziju sa 2 platforme. Pokusacu jos nekoliko puta, ako neko ima jos neki predlog neka ga da.

rudar
19.7.2007, 18:13
Platformska igra mu dodje neshto kao Super Mario? Ono sidelook i tako to?

EclipsE
19.7.2007, 18:14
Da da...

Stevvan
19.7.2007, 23:27
Evo poboljsao sam malo ali nije jos sasvim ono sto zelim. Btw, dodao sam da prati kamera igraca inspirasan rudarovim postom:D Prekopirajte ga samo u vec postojeci folder

Stevvan
20.7.2007, 11:09
Uspeo sam da jos malo sredim platformu i mislim da jedini bug koji je ostao je ovaj:
9433

Znaci kada se krecem prema drugoj platformi on se sudari i neprodje kroz nju sto je normalno. Ali ako pokusam da skocim pritom drzeci strelicu (u ovom slucaju za levo) on se zaglavi u paltformu umesto da sam skoci u vis ignorisuci zadatu komandu strelicom.

EclipsE
20.7.2007, 16:42
nesto si zeznuo u kodu, mozda ne proverava za koliziju dok drzish skok il...

Andross
7.12.2007, 22:56
Ako ikome bude ista znacilo evo koda kako bi to trebalo da izgleda:

class Kutija(rabbyt.Sprite):
def __init__(self, xy):
rabbyt.Sprite.__init__(self, "kutija.png")

self.xy = xy
self.rot = 0
self.velocity = [0.0, 0.0]
self.gravity = - 0.0981

self.jumps = 0

def update(self, dt):
self.velocity[1] += self.gravity
self.y += self.velocity[1] * dt

def render(self):
rabbyt.Sprite.render(self)

def collide(self, pod):
#levo i desno
gor = self.top - 3
dol = self.bottom + 3
lev = self.left + 24
des = self.right - 24
if self.left < pod.right and des > pod.right:
if dol < pod.top and gor > pod.bottom:
self.left = pod.right
if self.right > pod.left and lev < pod.left:
if dol < pod.top and gor > pod.bottom:
self.right = pod.left

# gore i dole
if self.bottom < pod.top and self.top > pod.top:
if self.left < pod.right and self.right > pod.left:
if self.velocity[1] < 0:
self.bottom = pod.top
self.velocity[1] = 0
self.jumps = 0
if self.top > pod.bottom and self.bottom < pod.bottom:
if self.left < pod.right and self.right > pod.left:
if self.velocity[1] > 0:
self.top = pod.bottom
self.velocity[1] = 0

def jump(self, dt):
if self.jumps < 2:
self.velocity[1] = 0
self.velocity[1] += 3 * dt
self.jumps += 1

def move(self, x, dt):
self.x += x * dt
Verujem da je vecina koda razumljiva sem gor, dol, lev, des :D
Znaci te varijable sluzi za detekciju kolizije objekta sa platformom sa leve ili desne strane. gor i dol sluze da sprece skakanje objekta na platformu i omogucava normalnu koliziju. One su prakticno malo smanjen BB za sprajt po visini :) Sada lev i des sluze da ne bi doslo do preteranog propadanja tj. kada je igrac negde na ivici i skace ko mentol moze ladno pa padne sa platforme. E da bi se to sprecilo u nekoj meri (tj. igrac padne samo ako je bash na ivici) sluze ove dve varijable. Ako nekome nije jastan neki deo koda neka pita i dobice odgovor! Pozz

P.S. Nadam se da ce ovo nekome koristiti :)

VojaM
8.12.2007, 12:16
Samo malo korisnog offtopica:
Reči "kolizija" i "sudar" su sinonimi ;)

Dake, kad kažeš "kolizija koja se dešava pri sudaru", to je kao da kažeš "isto takođe" ;)

Pretpostavljam da si hteo da kažeš da promenljive lev i des služe za detekciju sudara (ili kolizije) objekta sa platformom.