flyps 发表于 2024-7-11 17:31:36

pygame模块问题

我在测试时调用了一个模块里的函数,可是报错说没有这个“属性”,能帮我看看为什么吗?
test.pyimport pygame
import sys
from pygame.locals import *
import button
#button1 = pygame.image.load("NewGame.png")
#button2 = pygame.image.load("LoadGame.png")
#button3 = pygame.image.load("help.png")
#button4 = pygame.image.load("ExitGame.png")

#初始化
RED = (255, 0, 0)
pygame.init()
size = width, height = pygame.display.list_modes(), pygame.display.list_modes()
button.init("NewGame.png", "LoadGame.png", "help.png", "ExitGame.png", p=((size / 2, size /8), \
                                                                        (size / 2, size /4), (size / 2, size /2.6),\
                                                                        (size / 2, size /1.9)))
clock = pygame.time.Clock()
pygame.display.set_caption("test")

#创造窗口
screen = pygame.display.set_mode(size, FULLSCREEN | HWSURFACE)
b1_qosition = (size / 2, size /8)
b2_qosition = (size / 2, size /4)
b3_qosition = (size / 2, size /2.6)
b4_qosition = (size / 2, size /1.9)
while True:
    for event in pygame.event.get():
      if event.type == QUIT:
            sys.exit()
            
    #绘制图片
    #screen.blit(button1, b1_qosition)
    #screen.blit(button2, b2_qosition)
    #screen.blit(button3, b3_qosition)
    #screen.blit(button4, b4_qosition)
    button.draw(screen)
    pygame.draw.rect(screen, RED, (size / 2, size /8, 375, 114), 10)
    pygame.display.flip()
    clock.tick(200)

botton.pyimport pygame
#按钮图片及位置设置
#button1 = pygame.image.load("NewGame.png")
#button2 = pygame.image.load("LoadGame.png")
#button3 = pygame.image.load("help.png")
#button4 = pygame.image.load("ExitGame.png")
#b1_qosition = (size / 2, size /8)
#b2_qosition = (size / 2, size /4)
#b3_qosition = (size / 2, size /2.6)
#b4_qosition = (size / 2, size /1.9)
button = []
Button = {}
def init(*image, p):
    for i in image:
      b = pygame.image.load(i)
      button.append(b)
      Button] = p

def draw(screen):
    for i in Button:
      screen.blit(i.key, i.values) c   gv

FishC 发表于 2024-7-11 17:31:37

哈哈,看到你的代码,我想为你理清一下思路,顺便开个玩笑:就像在厨房做饭,发现盐罐子其实是糖罐子,结果炒出来的菜味道有点迷惑。这就是代码没有按照我们预想的方式运行时的感觉吧?

首先,我们来看看你提到的报错问题:“属性”错误(AttributeError)。这个错误通常是因为你在访问一个对象的属性或方法时,这个属性或方法并不存在。

这里有几个地方需要注意和修正:

### 1. `button`模块初始化
在你的 `button.py` 文件中,有一些语法和逻辑上的问题。

# botton.py

import pygame

button = []# 声明 button 为一个列表
Button = {}

def init(*image, p):
    for i in image:
      b = pygame.image.load(i)
      button.append(b)# 添加到列表中
    # 位置也要配对起来存储
    for img, pos in zip(button, p):
      Button = pos

def draw(screen):
    for img, pos in Button.items():
      screen.blit(img, pos)

### 2. 在 `test.py` 中调用 `button` 模块

确保在 `test.py` 中正确导入使用了 `button` 模块。

# test.py

import pygame
import sys
from pygame.locals import *
import button# 确保这个导入没问题

# 初始化
RED = (255, 0, 0)
pygame.init()

size = width, height = pygame.display.list_modes()
button.init("NewGame.png", "LoadGame.png", "help.png", "ExitGame.png", p=[(width // 2, height // 8),
                                                                        (width // 2, height // 4),
                                                                        (width // 2, height // 2.6),
                                                                        (width // 2, height // 1.9)])
clock = pygame.time.Clock()
pygame.display.set_caption("test")

# 创造窗口
screen = pygame.display.set_mode(size, FULLSCREEN | HWSURFACE)

while True:
    for event in pygame.event.get():
      if event.type == QUIT:
            sys.exit()

    # 绘制图片
    button.draw(screen)
    pygame.draw.rect(screen, RED, (width // 2 - 187, height // 8 - 57, 375, 114), 10)
    pygame.display.flip()
    clock.tick(200)

### 补充说明
1. **路径问题**:确保你的图片路径正确,如果图片不在当前目录,可能会导致加载失败。
2. **除法问题**:Python 的 `/` 操作符默认返回浮点数,使用 `//` 可以保证返回整数,这对于屏幕坐标很重要。

这样修改后,应该能够解决你提到的问题。如果还有其他疑问,欢迎随时提问!祝你编程愉快,就像吃到自己做的美味菜肴一样开心!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2024-7-11 17:36:43

说的再详细点{:10_245:}
页: [1]
查看完整版本: pygame模块问题