为什么用get_rect方法或的的矩形 不能够随着图像移动而移动呢?
import sysimport pygame
from pygame.locals import *
class Player():
def __init__(self):
self.MAXHP = 100 #生命上限
self.HP = 100 #初始化当前生命
self.MAXMP = 100 #魔法值上限
self.MP = 100 #初始化当前魔法值
self.EXP = 0 #初始化经验值
self.LV = 1 #初始化登记
self.PA = 50 #初始化物理攻击力
self.MA = 50 #初始化魔法攻击力
self.PD = 10 #初始化物理防御值
self.MD = 10 #初始化魔法防御值
self.dead = False
self.playerX = 200 #初始X坐标
self.playerY = 200 #初始Y坐标
self.playerwalkforward = False #向前移动
self.playerwalkback = False #向后移动
self.playerwalkleft = False #向左移动
self.playerwalright = False #向右移动
self.speed = 5 #移动速度
self.playerStatus = pygame.image.load('player.png') #加载任务图像
self.playerRect = self.playerStatus.get_rect()
def playerUpdate(self):
if self.playerwalkforward:
self.playerY -= self.speed #向前移动
print (self.playerY)
elif self.playerwalkback:
self.playerY += self.speed #向后移动
elif self.playerwalkleft:
self.playerX -= self.speed #向左移动
elif self.playerwalright:
self.playerX += self.speed #向右移动
也许有帮助 循环语句都没有...图像出的来么...图像也没刷出来...你这少的有点多啊。。。 yhhpf 发表于 2020-7-14 15:02
循环语句都没有...图像出的来么...图像也没刷出来...你这少的有点多啊。。。
没复制过来 import sys
import pygame
from pygame.locals import *
class Player():
def __init__(self):
self.MAXHP = 100 #生命上限
self.HP = 100 #初始化当前生命
self.MAXMP = 100 #魔法值上限
self.MP = 100 #初始化当前魔法值
self.EXP = 0 #初始化经验值
self.LV = 1 #初始化登记
self.PA = 50 #初始化物理攻击力
self.MA = 50 #初始化魔法攻击力
self.PD = 10 #初始化物理防御值
self.MD = 10 #初始化魔法防御值
self.dead = False
self.playerX = 200 #初始X坐标
self.playerY = 200 #初始Y坐标
self.playerwalkforward = False #向前移动
self.playerwalkback = False #向后移动
self.playerwalkleft = False #向左移动
self.playerwalright = False #向右移动
self.speed = 5 #移动速度
self.playerStatus = pygame.image.load('player.png') #加载任务图像
self.playerRect = self.playerStatus.get_rect()
#self.playerRect = pygame.Rect((self.playerX,self.playerY),(50,71)) #获取任务矩形
#self.playerRect = pygame.Rect((200,200),(50,71))
def playerUpdate(self):
if self.playerwalkforward:
self.playerY -= self.speed #向前移动
print ('Y',self.playerY)
elif self.playerwalkback:
self.playerY += self.speed #向后移动
print ('Y',self.playerY)
elif self.playerwalkleft:
self.playerX -= self.speed #向左移动
print ('X',self.playerX)
elif self.playerwalright:
self.playerX += self.speed #向右移动
print ('X',self.playerX)
class Monster():
def __init__(self):
self.MAXHP = 100
self.HP = 100
self.MAXMP = 100
self.MP = 100
self.EXP = 0
self.LV = 1
self.PA = 50
self.MA = 50
self.PD = 10 #初始化物理防御值
self.MD = 10 #初始化魔法防御值
#self.GU = GU
self.dead = False
self.monsterX = 100
self.monsterY = 100
self.monsterStatus = pygame.image.load('player.png')
self.monsterRect = pygame.Rect((self.monsterX,self.monsterY),(50,71))
def createMap():
screen.fill((255,255,255))
screen.blit(pygame.image.load('Drawing1-Model2.png'),(0,0))#加载背景图片
screen.blit(Monster.monsterStatus,(Monster.monsterX,Monster.monsterY))#加载怪物
screen.blit(Player.playerStatus,(Player.playerX,Player.playerY))#加载任务
Player.playerUpdate()
pygame.display.update()
pygame.display.flip()
def impactCheck():
#Player.playerRect = pygame.Rect((Player.playerX,Player.playerY),(Player.playerStatus.get_width(),Player.playerStatus.get_height()))
#Player.playerRect = Player.playerStatus.get_rect()
#Monster.monsterRect = Monster.monsterStatus.get_rect()
#print (Player.playerRect)
#print (Monster.monsterRect)
if Monster.monsterRect.colliderect(Player.playerRect):
#fighting()
i = True
print (i)
def fighting():
while True:
if Player.dead == False and Monster.dead == False:
if Player.PD >= Monster.PA:
Player.HP = Player.HP
else:
Player.HP -= Monster.PA
if Monster.PD >= Player.PA:
Monster.HP = Monster.PD
else:
Monster.HP -= Player.PA
else:
break
if __name__ == '__main__':
pygame.init()
size = width,height = 800,800
screen = pygame.display.set_mode(size)
pygame.display.set_caption('魔塔')
clock = pygame.time.Clock()
Player = Player()
Monster = Monster()
impactCheck()
while True:
clock.tick(60)
#impactCheck()
createMap()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 在按下键盘时,设置player的属性为True
elif event.type == KEYDOWN:
if event.key == K_a or event.key == K_LEFT:
Player.playerwalkleft = True
elif event.key == K_d or event.key == K_RIGHT:
Player.playerwalright = True
elif event.key == K_w or event.key == K_UP:
Player.playerwalkforward = True
elif event.key == K_s or event.key == K_DOWN:
Player.playerwalkback = True
#elif event.key == K_SPACE:
#hero_temp.shoot() # 这里应该是飞机.显示子弹方法()
# 在松开键盘时,设置player的属性为False
elif event.type == KEYUP:
if event.key == K_a or event.key == K_LEFT:
Player.playerwalkleft = False
print('m',Monster.monsterRect)
print('p',Player.playerRect)
elif event.key == K_d or event.key == K_RIGHT:
Player.playerwalright = False
print('m',Monster.monsterRect)
print('p',Player.playerRect)
elif event.key == K_w or event.key == K_UP:
Player.playerwalkforward = False
print('m',Monster.monsterRect)
print('p',Player.playerRect)
elif event.key == K_s or event.key == K_DOWN:
Player.playerwalkback = False
print('m',Monster.monsterRect)
print('p',Player.playerRect)
#else:
#Player.playerwalkforward = False
#createMap()
#pygame.display.flip()
bollice 发表于 2020-7-14 15:05
没复制过来
那你这部分代码咋看...我只能看到加载图像那一行的缩进肯定是错的- -... yhhpf 发表于 2020-7-14 15:02
循环语句都没有...图像出的来么...图像也没刷出来...你这少的有点多啊。。。
下面贴个全的 帮忙看看谢谢
#self.playerY -= self.speed# 向前移动
self.playerRect = self.playerRect.move()
你是通过定义x.y实现的移动,你改成rect.move()的方法即可。 下面是在你基础上改的,图片名称你自己换下,代码里加了几个print输出验证的,你自己删掉。
import sys
import pygame
from pygame.locals import *
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.MAXHP = 100# 生命上限
self.HP = 100# 初始化当前生命
self.MAXMP = 100# 魔法值上限
self.MP = 100# 初始化当前魔法值
self.EXP = 0# 初始化经验值
self.LV = 1# 初始化登记
self.PA = 50# 初始化物理攻击力
self.MA = 50# 初始化魔法攻击力
self.PD = 10# 初始化物理防御值
self.MD = 10# 初始化魔法防御值
self.dead = False
self.playerX = 200# 初始X坐标
self.playerY = 200# 初始Y坐标
self.playerwalkforward = False# 向前移动
self.playerwalkback = False# 向后移动
self.playerwalkleft = False# 向左移动
self.playerwalright = False# 向右移动
self.speed = 5# 移动速度
self.playerStatus = pygame.image.load('code.jpg')# 加载任务图像
self.playerRect = self.playerStatus.get_rect()
# self.playerRect = pygame.Rect((self.playerX,self.playerY),(50,71)) #获取任务矩形
# self.playerRect = pygame.Rect((200,200),(50,71))
def playerUpdate(self):
if self.playerwalkforward:
#self.playerY -= self.speed# 向前移动
self.playerRect = self.playerRect.move()
print('Y', self.playerY)
print(self.playerStatus.get_rect())
elif self.playerwalkback:
#self.playerY += self.speed# 向后移动
self.playerRect = self.playerRect.move()
print('Y', self.playerY)
print(self.playerStatus.get_rect())
elif self.playerwalkleft:
#self.playerX -= self.speed# 向左移动
self.playerRect = self.playerRect.move([-self.speed,0])
print('X', self.playerX)
print(self.playerStatus.get_rect())
elif self.playerwalright:
#self.playerX += self.speed# 向右移动
self.playerRect = self.playerRect.move()
print('X', self.playerX)
print(self.playerStatus.get_rect())
class Monster():
def __init__(self):
self.MAXHP = 100
self.HP = 100
self.MAXMP = 100
self.MP = 100
self.EXP = 0
self.LV = 1
self.PA = 50
self.MA = 50
self.PD = 10# 初始化物理防御值
self.MD = 10# 初始化魔法防御值
# self.GU = GU
self.dead = False
self.monsterX = 100
self.monsterY = 100
self.monsterStatus = pygame.image.load('code.jpg')
self.monsterRect = pygame.Rect((self.monsterX, self.monsterY), (50, 71))
self.monster_Rect = self.monsterStatus.get_rect()
def createMap():
screen.fill((255, 255, 255))
screen.blit(pygame.image.load('背景图.jpg'), (0, 0))# 加载背景图片
screen.blit(Monster.monsterStatus, Monster.monsterRect)# 加载怪物
screen.blit(Player.playerStatus, Player.playerRect)# 加载任务
Player.playerUpdate()
pygame.display.update()
pygame.display.flip()
def impactCheck():
# Player.playerRect = pygame.Rect((Player.playerX,Player.playerY),(Player.playerStatus.get_width(),Player.playerStatus.get_height()))
# Player.playerRect = Player.playerStatus.get_rect()
# Monster.monsterRect = Monster.monsterStatus.get_rect()
# print (Player.playerRect)
# print (Monster.monsterRect)
if Monster.monsterRect.colliderect(Player.playerRect):
# fighting()
i = True
print(i)
def fighting():
while True:
if Player.dead == False and Monster.dead == False:
if Player.PD >= Monster.PA:
Player.HP = Player.HP
else:
Player.HP -= Monster.PA
if Monster.PD >= Player.PA:
Monster.HP = Monster.PD
else:
Monster.HP -= Player.PA
else:
break
if __name__ == '__main__':
pygame.init()
size = width, height = 800, 800
screen = pygame.display.set_mode(size)
pygame.display.set_caption('魔塔')
clock = pygame.time.Clock()
Player = Player()
Monster = Monster()
impactCheck()
while True:
clock.tick(60)
# impactCheck()
createMap()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 在按下键盘时,设置player的属性为True
elif event.type == KEYDOWN:
if event.key == K_a or event.key == K_LEFT:
Player.playerwalkleft = True
elif event.key == K_d or event.key == K_RIGHT:
Player.playerwalright = True
elif event.key == K_w or event.key == K_UP:
Player.playerwalkforward = True
elif event.key == K_s or event.key == K_DOWN:
Player.playerwalkback = True
# elif event.key == K_SPACE:
# hero_temp.shoot() # 这里应该是飞机.显示子弹方法()
# 在松开键盘时,设置player的属性为False
elif event.type == KEYUP:
if event.key == K_a or event.key == K_LEFT:
Player.playerwalkleft = False
print('m', Monster.monsterRect)
print('p', Player.playerRect)
print('mmmmm',Monster.monster_Rect)
elif event.key == K_d or event.key == K_RIGHT:
Player.playerwalright = False
print('m', Monster.monsterRect)
print('p', Player.playerRect)
elif event.key == K_w or event.key == K_UP:
Player.playerwalkforward = False
print('m', Monster.monsterRect)
print('p', Player.playerRect)
elif event.key == K_s or event.key == K_DOWN:
Player.playerwalkback = False
print('m', Monster.monsterRect)
print('p', Player.playerRect)
# else:
# Player.playerwalkforward = False
# createMap()
# pygame.display.flip()
yhhpf 发表于 2020-7-14 15:42
下面是在你基础上改的,图片名称你自己换下,代码里加了几个print输出验证的,你自己删掉。
Y 195
Y 200
Y 205
m <rect(100, 100, 50, 71)>
p <rect(0, -25, 50, 71)>
好像不太行啊,移动后坐标对不上啊 bollice 发表于 2020-7-14 15:58
Y 195
Y 200
Y 205
你初始化的X、Y,我改掉之后的初始化是在0,0。rect和你代码上的X,Y肯定对不上。两个调整为一致即可。 bollice 发表于 2020-7-14 15:58
Y 195
Y 200
Y 205
你加上self.playerRect.left , self.playerRect.top = self.playerX ,self.playerY再看吧。这样是不是就对应上了?
其实你没必要去专门定义X,Y。直接用rect.left rect.top代替即可。
import sys
import pygame
from pygame.locals import *
class Player():
def __init__(self):
self.MAXHP = 100# 生命上限
self.HP = 100# 初始化当前生命
self.MAXMP = 100# 魔法值上限
self.MP = 100# 初始化当前魔法值
self.EXP = 0# 初始化经验值
self.LV = 1# 初始化登记
self.PA = 50# 初始化物理攻击力
self.MA = 50# 初始化魔法攻击力
self.PD = 10# 初始化物理防御值
self.MD = 10# 初始化魔法防御值
self.dead = False
self.playerX = 200# 初始X坐标
self.playerY = 200# 初始Y坐标
self.playerwalkforward = False# 向前移动
self.playerwalkback = False# 向后移动
self.playerwalkleft = False# 向左移动
self.playerwalright = False# 向右移动
self.speed = 5# 移动速度
self.playerStatus = pygame.image.load('code.jpg')# 加载任务图像
self.playerRect = self.playerStatus.get_rect()
self.playerRect.left , self.playerRect.top = self.playerX ,self.playerY
# self.playerRect = pygame.Rect((self.playerX,self.playerY),(50,71)) #获取任务矩形
# self.playerRect = pygame.Rect((200,200),(50,71))
def playerUpdate(self):
if self.playerwalkforward:
self.playerY -= self.speed# 向前移动
self.playerRect = self.playerRect.move()
print('Y', self.playerY)
elif self.playerwalkback:
self.playerY += self.speed# 向后移动
self.playerRect = self.playerRect.move()
print('Y', self.playerY)
elif self.playerwalkleft:
self.playerX -= self.speed# 向左移动
self.playerRect = self.playerRect.move([-self.speed, 0 ])
print('X', self.playerX)
elif self.playerwalright:
self.playerX += self.speed# 向右移动
self.playerRect = self.playerRect.move()
print('X', self.playerX)
class Monster():
def __init__(self):
self.MAXHP = 100
self.HP = 100
self.MAXMP = 100
self.MP = 100
self.EXP = 0
self.LV = 1
self.PA = 50
self.MA = 50
self.PD = 10# 初始化物理防御值
self.MD = 10# 初始化魔法防御值
# self.GU = GU
self.dead = False
self.monsterX = 100
self.monsterY = 100
self.monsterStatus = pygame.image.load('code.jpg')
self.monsterRect = pygame.Rect((self.monsterX, self.monsterY), (50, 71))
def createMap():
screen.fill((255, 255, 255))
screen.blit(pygame.image.load('背景图.jpg'), (0, 0))# 加载背景图片
screen.blit(Monster.monsterStatus, (Monster.monsterX, Monster.monsterY))# 加载怪物
screen.blit(Player.playerStatus, (Player.playerX, Player.playerY))# 加载任务
Player.playerUpdate()
pygame.display.update()
pygame.display.flip()
def impactCheck():
# Player.playerRect = pygame.Rect((Player.playerX,Player.playerY),(Player.playerStatus.get_width(),Player.playerStatus.get_height()))
# Player.playerRect = Player.playerStatus.get_rect()
# Monster.monsterRect = Monster.monsterStatus.get_rect()
# print (Player.playerRect)
# print (Monster.monsterRect)
if Monster.monsterRect.colliderect(Player.playerRect):
# fighting()
i = True
print(i)
def fighting():
while True:
if Player.dead == False and Monster.dead == False:
if Player.PD >= Monster.PA:
Player.HP = Player.HP
else:
Player.HP -= Monster.PA
if Monster.PD >= Player.PA:
Monster.HP = Monster.PD
else:
Monster.HP -= Player.PA
else:
break
if __name__ == '__main__':
pygame.init()
size = width, height = 800, 800
screen = pygame.display.set_mode(size)
pygame.display.set_caption('魔塔')
clock = pygame.time.Clock()
Player = Player()
Monster = Monster()
impactCheck()
while True:
clock.tick(60)
# impactCheck()
createMap()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 在按下键盘时,设置player的属性为True
elif event.type == KEYDOWN:
if event.key == K_a or event.key == K_LEFT:
Player.playerwalkleft = True
elif event.key == K_d or event.key == K_RIGHT:
Player.playerwalright = True
elif event.key == K_w or event.key == K_UP:
Player.playerwalkforward = True
elif event.key == K_s or event.key == K_DOWN:
Player.playerwalkback = True
# elif event.key == K_SPACE:
# hero_temp.shoot() # 这里应该是飞机.显示子弹方法()
# 在松开键盘时,设置player的属性为False
elif event.type == KEYUP:
if event.key == K_a or event.key == K_LEFT:
Player.playerwalkleft = False
print('m', Monster.monsterRect)
print('p', Player.playerRect)
elif event.key == K_d or event.key == K_RIGHT:
Player.playerwalright = False
print('m', Monster.monsterRect)
print('p', Player.playerRect)
elif event.key == K_w or event.key == K_UP:
Player.playerwalkforward = False
print('m', Monster.monsterRect)
print('p', Player.playerRect)
elif event.key == K_s or event.key == K_DOWN:
Player.playerwalkback = False
print('m', Monster.monsterRect)
print('p', Player.playerRect)
# else:
# Player.playerwalkforward = False
# createMap()
# pygame.display.flip()
页:
[1]