2 Probleme - falsche Bewegung u. keine Anzeigeaktualisierung
Verfasst: Donnerstag 4. November 2010, 22:35
Servus,
ich bastel immer noch an nem Prototypen eines kleinen Lernspiels, bei dem sich Figuren über eine Karte bewegen und dort Fragen suchen, herum.
Im Moment hab ich zwei Probleme, auf deren Lösung ich nicht komme.
Zum einen, wenn ich eine Spielfigur bewegen will, klick ich mit der Maus irgendwohin und lass das figur sich dort hin bewegen. Soweit so gut, oft funktionierts ohne Probleme, oft fährt die Figur aber auch einfach über die geklickte Position hinaus oder bleibt schon vorher stehen.
Und zum anderen, wollt ich, wenn der Spieler eine Frage auswählt, den Bildschirm, auf dem zu diesen Zeitpunkt die Karte angezeigt wird, einfach in einer neuen Farbe füllen und dann den Text hinzeichnen lassen, so lang bis eine Antwort ausgewählt wurde. Alle was bis jetz passiert, ist, dass er in die Warte-Schleife reingeht und nix mehr gemacht werden kann. Die Bildschirmanzeige ändert sich nicht.
Vermutlich sind das mal wieder irgendwelche Blödsinnsfehler. Aber ich seh da grad den Wald vor lauter Bäumen nicht...
Vielen Dank also schonmal für eure Mühen.
grüße greven
ich bastel immer noch an nem Prototypen eines kleinen Lernspiels, bei dem sich Figuren über eine Karte bewegen und dort Fragen suchen, herum.
Im Moment hab ich zwei Probleme, auf deren Lösung ich nicht komme.
Zum einen, wenn ich eine Spielfigur bewegen will, klick ich mit der Maus irgendwohin und lass das figur sich dort hin bewegen. Soweit so gut, oft funktionierts ohne Probleme, oft fährt die Figur aber auch einfach über die geklickte Position hinaus oder bleibt schon vorher stehen.
Code: Alles auswählen
if event.type == MOUSEBUTTONUP:
if event.button == 1:
playerPhysimon.mouseClicked(event.pos[0], event.pos[1])
Code: Alles auswählen
def mouseClicked (self, x, y):
a = x - self.artifactRect.left;
b = y - self.artifactRect.top;
theta = math.atan2(a, b);
self.moveX = self.moveSpeed * math.sin(theta);
self.moveY = self.moveSpeed * math.cos(theta);
self.newX = x
self.newY = y
Code: Alles auswählen
def move(player):
playerRect = playerPhysimon.getArtifactRect()
if(playerRect.centery!=playerPhysimon.getNewY() and playerRect.centerx!=playerPhysimon.getNewX()):
playerRect.centery += playerPhysimon.getMoveY()
playerRect.centerx += playerPhysimon.getMoveX()
if (playerRect.left < 0):
# the previous submap is loaded
returnToSubmap()
playerPhysimon.setMoveX(math.fabs(playerPhysimon.getMoveX()))
if (playerRect.left + playerRect.width > SUBMAPWIDTH):
# enter next submap, will check if player is allowed to
enterNewSubMap()
if (playerRect.top < 0):
playerRect.top = 0
playerPhysimon.setMoveY(math.fabs(playerPhysimon.getMoveY()))
if (playerRect.top + playerRect.height > SUBMAPHEIGHT):
playerRect.top = SUBMAPHEIGHT - playerRect.height
playerPhysimon.setMoveY(-1.0 * math.fabs(playerPhysimon.getMoveY()))
Code: Alles auswählen
def printMap(self, allPhysimons, playerPhysimon, questionList1, questionList2, bouncer):
''
self.windowSurface.fill(self.backgroundColor)
imageString = playerPhysimon.getName()
imageString += '_klein.png'
try:
playerImage = pygame.image.load(imageString)
except pygame.error:
playerImage = pygame.image.load('UserCar.png')
playerImage = pygame.transform.scale(playerImage, (playerPhysimon.getArtifactRect().width,playerPhysimon.getArtifactRect().height))
self.windowSurface.blit(playerImage, playerPhysimon.getArtifactRect())
for physimon in allPhysimons:
imageString = physimon.getName()
imageString += '_klein.png'
try:
opponentImage = pygame.image.load(imageString)
except pygame.error:
opponentImage = pygame.image.load('UserCar.png')
self.windowSurface.blit(opponentImage, physimon.getArtifactRect())
if len(questionList1) != 0:
self.questionImage = pygame.transform.scale(self.questionImage, (questionList1[0].getArtifactRect().width, questionList1[0].getArtifactRect().height))
self.windowSurface.blit(self.questionImage, questionList1[0].getArtifactRect())
else:
self.windowSurface.blit(self.noQuestionImage, (100,200))
if len(questionList2) != 0:
self.questionImage = pygame.transform.scale(self.questionImage, (questionList2[0].getArtifactRect().width, questionList2[0].getArtifactRect().height))
self.windowSurface.blit(self.questionImage, questionList2[0].getArtifactRect())
else:
self.windowSurface.blit(self.noQuestionImage, (300,400))
if (playerPhysimon.getOpenSubmaps <= self.id):
self.windowSurface.blit(self.questionImage, bouncer.getArtifactRect())
pygame.display.update()
def showQuestion(self, question):
self.windowSurface.fill((253, 245 , 230))
self.thisQuestion = self.font.render(str(question.getProblemStatement), 1, (0,0,0))
self.right = self.font.render(str(question.getRightAnswerText), 1, (0,0,0))
self.wrong = self.font.render(str(question.getWrongAnswerTextA), 1, (0,0,0))
self.wrong2 = self.font.render(str(question.getWrongAnswerTextB), 1, (0,0,0))
self.questionRect = self.thisQuestion.get_rect()
self.rightRect = self.right.get_rect()
self.wrongRect = self.wrong.get_rect()
self.wrongRect2 = self.wrong2.get_rect()
self.questionRect.topleft = (10, 10)
#random setting of answer positions
self.rightRect.topleft = (110, 10)
self.wrongRect.topleft = (140, 10)
self.wrongRect2.topleft = (170, 10)
self.windowSurface.blit(self.thisQuestion, self.questionRect)
self.windowSurface.blit(self.right, self.rightRect)
self.windowSurface.blit(self.wrong, self.wrongRect)
self.windowSurface.blit(self.wrong2, self.wrongRect2)
Vielen Dank also schonmal für eure Mühen.
grüße greven