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