我正在尝试碰撞这两个图像,但由于某种原因,它并非如此。我想知道如何修复程序,以免图像冲突。
我尝试过在周围移动敌人的精灵,尝试从if语句中删除并使用变量。我没有太多的知识,据我所知。
from time import sleep as s
import random
import pygame
import time
pygame.init()
window = pygame.display.set_mode((1000, 500))
pygame.display.set_caption("Practice Game")
image = pygame.image.load('pixel6.png')
image = pygame.transform.scale(image, (1000, 500))
jumpv1 = [pygame.image.load('adventurer-jump-00.png'),pygame.image.load('adventurer-jump-01.png'),pygame.image.load('adventurer-jump-02.png'),pygame.image.load('adventurer-jump-03.png'), pygame.image.load('adventurer-smrslt-00.png'),pygame.image.load('adventurer-smrslt-01.png'),pygame.image.load('adventurer-smrslt-02.png'),pygame.image.load('adventurer-smrslt-03.png')]
jumpv2 = [pygame.image.load('adventurer-smrslt-00.png'),pygame.image.load('adventurer-smrslt-01.png'),pygame.image.load('adventurer-smrslt-02.png'),pygame.image.load('adventurer-smrslt-03.png')]
jumpv3 = [pygame.image.load('adventurer-smrslt-00.png'),pygame.image.load('adventurer-smrslt-01.png'),pygame.image.load('adventurer-smrslt-02.png'),pygame.image.load('adventurer-smrslt-03.png')]
jumpv4 = [pygame.image.load('adventurer-smrslt-00.png'),pygame.image.load('adventurer-smrslt-01.png'),pygame.image.load('adventurer-smrslt-02.png'),pygame.image.load('adventurer-smrslt-03.png')]
jump1 = jumpv1+jumpv2+jumpv3+jumpv4
run2 = [pygame.image.load('adventurer-run-00.png'), pygame.image.load('adventurer-run-01.png'),pygame.image.load('adventurer-run-02.png'),pygame.image.load('adventurer-run-03.png')]
slide1 = [pygame.image.load('adventurer-slide-00.png'),pygame.image.load('adventurer-slide-01.png'),pygame.image.load('adventurer-stand-00.png'),pygame.image.load('adventurer-stand-01.png'),pygame.image.load('adventurer-stand-02.png')]
firstattack = [pygame.image.load('adventurer-attack3-00.png'),pygame.image.load('adventurer-attack3-01.png'),pygame.image.load('adventurer-attack3-02.png'),pygame.image.load('adventurer-attack3-03.png'),pygame.image.load('adventurer-attack3-04.png'),pygame.image.load('adventurer-attack3-05.png')]
secondattack = [pygame.image.load('adventurer-attack2-00.png'),pygame.image.load('adventurer-attack2-01.png'),pygame.image.load('adventurer-attack2-02.png'),pygame.image.load('adventurer-attack2-03.png'),pygame.image.load('adventurer-attack2-04.png'),pygame.image.load('adventurer-attack2-05.png')]
thirdattack = [pygame.image.load('adventurer-attack1-00.png'),pygame.image .load('adventurer-attack1-01.png'),pygame.image.load('adventurer-attack1-02.png'),pygame.image.load('adventurer-attack1-03.png'), pygame.image.load('adventurer-attack1-04.png')]
falling = [pygame.image.load('adventurer-fall-00.png'), pygame.image.load('adventurer-fall-01.png')]
attack = firstattack+secondattack+ thirdattack
run = True
for i in range (20):
jump1[i] = pygame.transform.scale(jump1[i],(90,90))
for i in range(3):
run2[i] = pygame.transform.scale(run2[i],(90,90))
runq = pygame.sprite.Sprite()
runq.rect = pygame.Rect(40,391,90,90)
for i in range (4):
slide1[i] = pygame.transform.scale(slide1[i],(90,90))
for i in range (1):
falling[i] = pygame.transform.scale(falling[i],(90,90))
for i in range(16):
attack[i] = pygame.transform.scale(attack[i],(90,90))
imagex = 0
imagex2 = image.get_width()
clock = pygame.time.Clock()
img1 = pygame.image.load('imgg.png')
class obstacles(object):
global runq,jumpq,enemy
img = [pygame.image.load('imgg.png'),pygame.image.load('imgg.png')]
def __init__(self, x,y, width1, height):
global runq,jumpq,enemy
self.x = x
self.y =y
self.width1 = width1
self.height = height
self.hitbox = (x,y,width1,height)
self.count = 0
enemy = pygame.sprite.Sprite()
enemy.rect = pygame.Rect(self.x, self.y, 150, 100)
def draw(self, window):
global runq,jumpq,enemy
if self.count >=1:
self.count = 0
self.count +=1
window.blit(pygame.transform.scale(self.img[self.count], (150,100)), (self.x, self.y))
class player(object):
def __init__(self, x,y):
self.vel = 0.5
self.run1 = True
self.jump2 = True
self.slide2 = True
self.attack1 = True
self.isJump = False
self. jumps = True
self.falling1 = True
self.player_x = 40
self.player_y = 391
self.x = 40
self.y = 391
self.width = 391
self.speed = 0.6
self.jumpcount = 10
self.jumpcount1 = 0
self.runcount = 0
self.attack2 = 0
self.slide = 0
self.fallspeed = 0.3
self.falling2 = 0
def movement(self, window):
pygame.time.delay(20)
if self.runcount >= 3:
self.runcount = 0
if self.run1 == True:
window.blit(run2[self.runcount],(int(self.player_x),int(self.player_y)))
self.runcount +=1
if keys[pygame.K_DOWN]:
if self.player_y == 391:
self.run1 = False
if self.slide >= 4:
self.slide = 0
if self.slide2:
window.blit(slide1[self.slide],(int(self.player_x),int(self.player_y)))
self.slide +=1
if event.type == pygame.KEYDOWN:
if (event.key == pygame.K_DOWN )and self.player_y < self.width:
self.run1 = False
self.jump2 = False
self.fallspeed += 0.2
if self.falling2 >= 1:
self.falling2 = 0
if self.falling1:
window.blit(falling[self.falling2], (int(self.player_x),int(self.player_y)))
self.falling2 +=1
if keys[pygame.K_UP]:
self.fallspeed = 0.3
self.run1 = False
if self.jumpcount1 >= 20:
self.jumpcount1 = 0
if self.jump2:
window.blit(jump1[self.jumpcount1],(int(self.player_x),int(self.player_y)))
self.jumpcount1 +=1
self.fallspeed = 0.3
if keys[pygame.K_p]:
self.run1 = False
self.jump2 = False
self.slide2 = False
self.falling = False
if self.attack2 >= 16:
self.attack2 = 0
if self.attack1:
window.blit(attack[self.attack2],(int(self.player_x),int(self.player_y)))
self.attack2 += 1
if keys[pygame.K_DOWN] and keys[pygame.K_UP]:
self.run1 = False
if event.type == pygame.KEYUP:
if event.key == pygame.K_DOWN:
self.run1 = True
self.jump2 = True
self.fallspeed = 0.3
if event.key == pygame.K_UP:
self.run1=True
if event.key == pygame.K_p:
self.run1 = True
self.jump2 = True
self.slide2 = True
self.falling = True
##
##class enemy(object):
## walkright = [pygame.image.load('R1E.png'), pygame.image.load('R2E.png'), pygame.image.load('R3E.png'), pygame.image.load('R4E.png'), pygame.image.load('R5E.png'), pygame.image.load('R6E.png'), pygame.image.load('R7E.png'), pygame.image.load('R8E.png'), pygame.image.load('R9E.png'), pygame.image.load('R10E.png'), pygame.image.load('R11E.png')]
## walkleft = [pygame.image.load('L1E.png'), pygame.image.load('L2E.png'), pygame.image.load('L3E.png'), pygame.image.load('L4E.png'), pygame.image.load('L5E.png'), pygame.image.load('L6E.png'), pygame.image.load('L7E.png'), pygame.image.load('L8E.png'), pygame.image.load('L9E.png'), pygame.image.load('L10E.png'), pygame.image.load('L11E.png')]
## for i in range (10):
## walkright[i] = pygame.transform.scale(walkright[i],(70,70))
## for i in range(10):
## walkleft[i] = pygame.transform.scale(walkleft[i],(70,70))
##
## def __init__(self,enemy_x,enemy_y, end):
## self.x = enemy_x
## self.y = enemy_y
## self.end = end
## self.path = [self.x,self.end]
## self.walkcount = 0
## self.vel = 3
##
## def draw_enemy(self,window):
## self.move()
## if self.walkcount+1 >= 33:
## self.walkcount = 0
## #walking right
## if self.vel > 0:
## window.blit(self.walkright[self.walkcount//3], (self.x,self.y))
## self.walkcount += 1
## #walking left
## else:
## window.blit(self.walkleft[self.walkcount//3], (self.x,self.y))
## self.walkcount += 1
##
## def move(self):
## if self.vel > 0:
## #see if position + movement space is < the end, then it is able to move
## if self.x + self.vel < self.path[1]:
## self.x += self.vel
## #past end point and turns 180
## else:
## self.vel = self.vel*-1
## self.walkcount = 0
## #see if position is smaller than starting position
#### else:
#### if self.x - self.vel < self.path[0]:
#### #vel is already negative
#### self.x += self.vel
#### else:
#### #Truns 180 agian
#### self.vel = self.vel*-1
#### self.walkcount = 0
objects = []
def keepdrawing():
global enemy
window.blit(image, (imagex,0))
window.blit(image, (imagex2,0))
for object1 in objects:
object1.draw(window)
adventurer.movement(window)
## attacker.draw_enemy(window)
pygame.display.update()
if pygame.sprite.collide_rect(runq, enemy) == True:
print(1)
##enemy = enemy(501,391,540)
adventurer = player(391,40)
pygame.time.set_timer(pygame.USEREVENT+2,random.randrange(2000, 5000))
obj = True
while run:
clock.tick(60)
imagex -= 2
imagex2 -= 2
if imagex < image.get_width() * -1:
imagex = image.get_width()
if imagex2 < image.get_width() * -1:
imagex2 = image.get_width()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.USEREVENT+1:
adventurer.speed += 1
if event.type == pygame.USEREVENT+2:
new_obstacle = obstacles(1050,390,64,64)
objects.append(new_obstacle)
for object1 in objects:
object1.x -= 10
if object1.x < -100:
objects.pop(objects.index(object1))
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if not(adventurer.isJump):
if keys[pygame.K_UP]:
adventurer.isJump =True
else:
if adventurer.jumpcount >= -10:
neg=1
if adventurer.player_y > adventurer.width:
adventurer.player_y = adventurer.width
if adventurer.jumpcount <0:
neg = -1
## s(0.01)
adventurer.player_y -= (adventurer.jumpcount**2)*adventurer.fallspeed*neg
## s(0.01)
adventurer.jumpcount -=1
if adventurer.player_y > adventurer.width:
adventurer.player_y=adventurer.width
else:
adventurer.isJump = False
adventurer.jumpcount = 10
if adventurer.player_y > adventurer.width:
player_y = adventurer.width
adventurer.fallspeed = 0.3
keepdrawing()
预期结果应为1