【发布时间】:2019-06-26 07:10:12
【问题描述】:
self.p 中的 x 和 y 不更新 self.p 是一个绘制变量
当您使用箭头键时,它们会更改 x,而按钮 x 在变量 P 中不会更改 ..................................................... ....................
self.P = pygame.Rect(self.x, self.y, self.width, self.height)
self.OB = pygame.Rect(self.oX, self.oY, self.width, self.height)
抱歉格式化
这是我的代码:
import pygame
import time
pygame.init()
pygame.display.set_caption('Platformer')
class Game:
def __init__(self):
self.DEBUG=True
self.x=7
self.y=400
self.tX=1200
self.tY=600
self.width=40
self.height=60
self.vel=9
self.run=True
self.isJump=False
self.jumpCount=10
self.clock = pygame.time.Clock()
self.clock.tick(60)
self.flag = False
self.win=pygame.display.set_mode((1200, 600))
self.font = pygame.font.Font('freesansbold.ttf', 64)
self.dieText = self.font.render('Well crap', True, (255,0,0), (245,245,245))
self.dieRect = self.dieText.get_rect()
self.dieRect.center = (self.tX // 2, self.tY // 2)
self.die = False
self.dieFlag = False
self.pause = False
self.pauseFlag=False
self.pauseText = self.font.render('Pause', True, (0,150,150), (245,245,245))
self.pauseRect = self.pauseText.get_rect()
self.pauseRect.center = (self.tX // 2, 150)
self.oX = 400
self.oY = 400
self.P = pygame.Rect(self.x, self.y, self.width, self.height)
self.OB = pygame.Rect(self.oX, self.oY, self.width, self.height)
self.pColor = (0,0,0)
self.oColor = (255, 0, 0)
def GameLoop(self):
while self.run:
if self.DEBUG==True:
print(self.x)
print(self.P)
print(self.OB)
if self.flag == False:
print('yes')
if self.pauseFlag==True:
print('ok')
pygame.time.delay(15)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
self.run == False
keys = pygame.key.get_pressed()
if self.die == True:
self.dieFlag=True
if self.pause == True:
self.pauseFlag=True
if self.pause==False:
self.pauseFlag=False
if keys[pygame.K_p]:
self.pause=True
if keys[pygame.K_o]:
self.pause=False
if keys[pygame.K_ESCAPE]:
pygame.quit()
quit()
if self.die==False and self.pause==False:
if self.flag == False and keys[pygame.K_SPACE] or keys[pygame.K_UP]:
self.starttime = pygame.time.get_ticks()
self.flag = True
self.isJump=True
if self.flag == True and pygame.time.get_ticks() - self.starttime >= 475:
self.flag = False
if keys[pygame.K_p] and self.pause==False and self.die == False:
self.pause=True
if keys[pygame.K_o] and self.pause== True:
self.pause=False
if keys[pygame.K_LEFT] and self.x > self.vel:
self.x-=self.vel
if keys[pygame.K_RIGHT] and self.x < 1200 - self.width - self.vel :
self.x+=self.vel
if keys[pygame.K_k]:
self.die=True
if not(self.isJump):
if keys[pygame.K_DOWN] and self.y < 600 - self.height - self.vel:
self.y += 0
else:
if self.jumpCount >= -10:
self.y -= (self.jumpCount * abs(self.jumpCount)) * .55
self.jumpCount -= 1
else:
self.jumpCount = 10
self.isJump = False
if self.dieFlag == True:
self.win.fill((245,245,245))
if self.pauseFlag == True:
self.win.blit(self.pauseText, self.pauseRect)
pygame.draw.rect(self.win, self.oColor, (self.oX,self.oY, 100, 200))
pygame.draw.rect(self.win, self.pColor, (self.x,self.y, self.width, self.height))
self.win.blit(self.dieText, self.dieRect)
pygame.display.update()
elif self.pauseFlag==False:
pygame.draw.rect(self.win, self.oColor, (self.oX,self.oY, 100, 200))
pygame.draw.rect(self.win, self.pColor, (self.x,self.y, self.width, self.height))
self.win.blit(self.dieText, self.dieRect)
pygame.display.update()
elif self.dieFlag == False:
if self.pauseFlag == True:
self.win.fill((245,245,245))
self.win.blit(self.pauseText, self.pauseRect)
pygame.draw.rect(self.win, self.oColor, (self.oX,self.oY, 100, 200))
pygame.draw.rect(self.win, self.pColor, (self.x,self.y, self.width, self.height))
pygame.display.update()
elif self.pauseFlag==False:
self.win.fill((245,245,245))
pygame.draw.rect(self.win, self.oColor, (self.oX,self.oY, 40, 60))
pygame.draw.rect(self.win, self.pColor, (self.x,self.y, self.width, self.height))
pygame.display.update()
g=Game()
g.GameLoop()
非常感谢任何帮助 也很抱歉格式化
【问题讨论】:
-
什么意思? “这些变量中的变量不更新”非常不清楚。
-
您应该添加当前输出以及预期输出。另外,你在哪里调用任何应该更新这些变量的代码?
-
您是否希望
Rects 在您创建它们时使用的值 的变量发生变化时发生变化?他们之间没有任何联系——。 (这与x = 0; y = x; x = 1; print(y)打印 0 而不是 1 的方式相同。) -
当然
self.P.x不会在self.x改变时神奇地改变。当您执行self.P = pygame.Rect(self.x, self.y, self.width, self.height)时,将创建对象self.P,并将self.x的值复制到self.P.x。从这一点开始,这些是未连接的不同值对象。最初它们具有相同的整数值,但仅此而已。
标签: python python-3.x pygame