Hei,
Sitter å knoter litt med pygame. Har lagt meg et lite "spill", men har støtt på et problem. Ved flytting av NPC-er, har jeg laget en sjekk for å være sikker på at de holder seg innenfor skjermen. Denne sjekken blir kjørt en gang for hver NPC pr. frame gjennom funksjonen update:
Hvor:
movepos[0] er vinkel
movepos[1] er hastighet
I mine øyner skulle denne sjekken fungere, da den både sjekker hvilken del av NPC-en som er ute av skjermen (top, bottom, left eller right) og om vinkelen faktisk peker mot den aktuelle kanten av skjermen.
Likevel så fungerer dette ikke, da NPC-en plutselig kan finne på å rote seg bort, utenfor skjermen. Er det noen som klarer å se hva som er problemet her?
Hvis dere har andre tips til forbedring av koden så tar jeg gjerne i mot dem også. Vedlagt ligger hele koden, inkludert sprites.
Testet med Python 2.6.6 og pygame 1.9.1, men det burde fungere på andre versjoner også.
Sitter å knoter litt med pygame. Har lagt meg et lite "spill", men har støtt på et problem. Ved flytting av NPC-er, har jeg laget en sjekk for å være sikker på at de holder seg innenfor skjermen. Denne sjekken blir kjørt en gang for hver NPC pr. frame gjennom funksjonen update:
Kode
def update(self, npcs = None): self.movepos[1] = self.speed turn = rand() if turn < 0.07: self.movepos[0] += 0.2*PI*rand() elif turn < 0.14: self.movepos[0] -= 0.2*PI*rand() if npcs != None: self.change_direction(npcs) dx = cos(self.movepos[0])*self.movepos[1] dy = sin(self.movepos[0])*self.movepos[1] newpos = self.rect.move((dx, dy)) if not self.area.contains(newpos): tl = not self.area.collidepoint(newpos.topleft) tr = not self.area.collidepoint(newpos.topright) bl = not self.area.collidepoint(newpos.bottomleft) br = not self.area.collidepoint(newpos.bottomright) # NOTE: # Also checking that the direction is in fact against # a wall, ensuring its not moving away from it. This because # it could have turned around during the previous frame, but not # got far away enough to escape the walls top = tr and tl and sin(self.movepos[0]) <= 0 bottom = br and bl and sin(self.movepos[0]) >= 0 left = tl and bl and cos(self.movepos[0]) <= 0 right = tr and br and cos(self.movepos[0]) >= 0 if top or bottom: self.movepos[0] = -self.movepos[0] self.rect = self.rect.move(self.movepos) elif left or right: self.movepos[0] = PI - self.movepos[0] self.rect = self.rect.move(self.movepos) else: self.rect = newpos else: self.rect = newpos pygame.event.pump()
movepos[0] er vinkel
movepos[1] er hastighet
I mine øyner skulle denne sjekken fungere, da den både sjekker hvilken del av NPC-en som er ute av skjermen (top, bottom, left eller right) og om vinkelen faktisk peker mot den aktuelle kanten av skjermen.
Likevel så fungerer dette ikke, da NPC-en plutselig kan finne på å rote seg bort, utenfor skjermen. Er det noen som klarer å se hva som er problemet her?
Hvis dere har andre tips til forbedring av koden så tar jeg gjerne i mot dem også. Vedlagt ligger hele koden, inkludert sprites.
Testet med Python 2.6.6 og pygame 1.9.1, men det burde fungere på andre versjoner også.