Почему не срабатывает триггер?

Есть игра:
from ntpath import join
import pygame
from pygame.locals import *
import os
import sys

from pygame.transform import scale

pygame.init()
pygame.mixer.init()

motion = "stop"

screen = pygame.display.set_mode((512, 512))
pygame.display.set_caption('Endlace')

clock = pygame.time.Clock()
allSprites = pygame.sprite.Group()

### Настраиваем директории ###
rootPath = os.path.dirname(__file__)
resourcesPath = os.path.join(rootPath, "resources")
texturesPath = os.path.join(resourcesPath, "textures")
playerPath = os.path.join(texturesPath, "player")
skinsPath = os.path.join(playerPath, "skins")
defaultIdle = os.path.join(skinsPath, "default-idle")
defaultRun = os.path.join(skinsPath, "default-run")

### Настраиваем пути текстур ###
ground512 = pygame.image.load(os.path.join(texturesPath, "ground512x512.png"))
box = pygame.image.load(os.path.join(texturesPath, "normalbox.png"))
box = pygame.transform.scale(box, (64, 64))
playerShadow = pygame.image.load(os.path.join(playerPath, "shadow.png"))
playerShadow = pygame.transform.scale(playerShadow, (64,64))
boxSprite = pygame.sprite.Sprite()
boxSprite.image = box
boxSprite.rect = box.get_rect()

### Настраиваем шрифт ###
font1 = pygame.font.Font('font.ttf', 36)

grid1 = pygame.Rect((0,0,64,64))
fakeScreen = screen.copy()
testSurface = pygame.Surface((512,512))

screenScrollX = 0
screenScrollY = 0

frameCount = 0

mapList = [[[0,0,0,0,0,0,0,0], #layer 1
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0]],
			   
		   [[0,0,0,0,0,0,0,0], #layer 2
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0]],
			   
		   [[0,0,0,0,0,0,0,0], #layer 3
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0]],
			   
		   [[0,0,0,0,0,0,0,0], #layer 4
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0],
		   	[0,0,0,0,0,0,0,0]],]

### Классы ###
class Player(pygame.sprite.Sprite):
	def __init__(self):
		pygame.sprite.Sprite.__init__(self)
		self.image = pygame.image.load(os.path.join(defaultIdle, "frame1.png"))
		self.image = pygame.transform.scale(self.image, (64, 64))
		self.rect = self.image.get_rect()
		self.rect.center = (128,128)


	def moveRight(self):
		global screenScrollX
		if not self.rect.right > 512:
			self.rect.x += 4
			# screenScrollX -= 8
	
	def moveLeft(self):
		global screenScrollX
		if not self.rect.left < 0:
			self.rect.x -= 4
			# screenScrollX += 8
	
	def moveUp(self):
		global screenScrollY
		if not self.rect.top < 0:
			self.rect.y -= 4
			# screenScrollY += 8
	
	def moveDown(self):
		global screenScrollY
		if not self.rect.bottom > 512:
			self.rect.y += 4
			# screenScrollY -= 8
	
	def moveLeftDown(self):
		global screenScrollX, screenScrollY
		if not self.rect.bottom > 512:
			if not self.rect.left < 0:
				self.rect.y += 4
				# screenScrollY -= 8
				self.rect.x -= 4
				# screenScrollX += 8

	def moveLeftUp(self):
		global screenScrollX, screenScrollY
		if not self.rect.top < 0:
			if not self.rect.left < 0:
				self.rect.y -= 4
				# screenScrollY += 8
				self.rect.x -= 4
				# screenScrollX += 8

	def moveRightDown(self):
		global screenScrollX, screenScrollY
		if not self.rect.bottom > 512:
			if not self.rect.right > 512:
				self.rect.y += 4
				# screenScrollY -= 8
				self.rect.x += 4
				# screenScrollX -= 8

	def moveRightUp(self):
		global screenScrollX, screenScrollY
		self.rect.y -= 4
		# screenScrollY += 8
		self.rect.x += 4
		# screenScrollX -= 8


player = Player()
allSprites.add(player)

def mainMenu():
	while True:
		clock.tick(60)

		screen.fill((0,0,0))

		posX, posY = pygame.mouse.get_pos()

		for event in pygame.event.get():
			if event.type == QUIT:
				pygame.quit()
				sys.exit()
		
		pygame.display.flip()

def sandbox():
	global motion
	global frameCount
	while True:
		clock.tick(60)
		
		screen.fill((0,0,0))

		posX, posY = pygame.mouse.get_pos()

		for event in pygame.event.get():
			if event.type == QUIT:
				pygame.quit()
				sys.exit()
			elif event.type == pygame.KEYUP:
				motion = "stop"
			elif event.type == pygame.MOUSEBUTTONDOWN:
				if event.button == 1:
					boxSprite = pygame.sprite.Sprite()
					boxSprite.image = box
					boxSprite.rect = box.get_rect()
					print(int(posX/64))
					print(int(posY/64))
					clickX = int(posX/64)
					clickY = int(posY/64)
					if mapList[0][clickX][clickY] == 1:
						mapList[1][clickX][clickY] = 1
						boxSprite.rect.x = (posX//64)*64
						boxSprite.rect.y = (posY//64)*64-28
						print(mapList)
						allSprites.add(boxSprite)
					elif mapList[1][clickX][clickY] == 1:
						mapList[2][clickX][clickY] = 1
						boxSprite.rect.x = (posX//64)*64-58
						print(mapList)
						allSprites.add(boxSprite)
					elif mapList[2][clickX][clickY] == 1:
						mapList[3][clickX][clickY] = 1
						boxSprite.rect.x = (posX//64)*64-678
						print(mapList)
						allSprites.add(boxSprite)
					else:
						mapList[0][clickX][clickY] = 1
						boxSprite.rect.x = (posX//64)*64
						boxSprite.rect.y = (posY//64)*64
						print(mapList)
						allSprites.add(boxSprite)
					# print(mapList)
					allSprites.add(boxSprite)
				
		keys = pygame.key.get_pressed()
		
		if frameCount + 1 >= 27:
			frameCount = 0

		#moving
		if keys[pygame.K_LEFT] or keys[pygame.K_a]:
			motion = "left"
		if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
			motion = "right"
		if keys[pygame.K_UP] or keys[pygame.K_w]:
			motion = "up"
		if keys[pygame.K_DOWN] or keys[pygame.K_s]:
			motion = "down"
		if keys[pygame.K_LEFT] and keys[K_UP]:
			motion = "leftup"
		if keys[pygame.K_LEFT] and keys[K_DOWN]:
			motion = "leftdown"
		if keys[pygame.K_RIGHT] and keys[K_UP]:
			motion = "rightup"
		if keys[pygame.K_RIGHT] and keys[K_DOWN]:
			motion = "rightdown"

		if motion == "left":
			player.moveLeft()
			# fakeScreen.blit(player.images[frameCount//3], (player.rect.x,player.rect.y))
			# frameCount += 1
		if motion == "right":
			player.moveRight()
			# fakeScreen.blit(player.images[frameCount//3], (player.rect.x,player.rect.y))
			# frameCount += 1
		if motion == "up":
			player.moveUp()
			# fakeScreen.blit(player.images[frameCount//3], (player.rect.x,player.rect.y))
			# frameCount += 1
		if motion == "down":
			player.moveDown()
			# fakeScreen.blit(player.images[frameCount//3], (player.rect.x,player.rect.y))

		if motion == "leftup":
			player.moveLeftUp()
		if motion == "leftdown":
			player.moveLeftDown()
		if motion == "rightup":
			player.moveRightUp()
		if motion == "rightdown":	
			player.moveRightDown()

		if motion == "stop":
			pass
	
		# screen.blit(player, (0,0))
		fakeScreen.blit(ground512, (0,0))
		fakeScreen.blit(playerShadow, (player.rect.x, player.rect.y))
		allSprites.update()
		allSprites.draw(fakeScreen)
		text2 = font1.render(str(int(clock.get_fps())), False,
                  (255, 255, 255))
		fakeScreen.blit(text2, (0,0))
		screen.blit(pygame.transform.scale(fakeScreen, (512, 512)), (screenScrollX,screenScrollY))
		pygame.display.flip()

sandbox()


И у меня появилась проблема с тем, что после появления 2-го слоя блоков(если нажать по одному месту два раза, то появится некая башня), остальные триггеры не срабатывают.

6196740114846472067883.gif

Как видно на видео, после появления второго слоя блоков, дальше поставить блок не получается.

Ошибок в коде во время игры нет.

Можете помочь, как решить эту проблему?
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы