猪猪虾 发表于 2020-4-20 22:33:53

72行,NameError: name 'ocartoon_rect' is not defined

本帖最后由 猪猪虾 于 2020-4-20 23:00 编辑


import pygame
import sys   #退出程序时要用
from pygame.locals import *

#初始化pygame,他是一个包
pygame.init()
resortion = pygame.display.list_modes()#获取当前屏幕允许的分辨率

size= width,height = 600,400
speed = [-2,1]   #x每次往左走2,Y向下偏移1格
bg=(255,255,255)   #背景填充为白色

#创建指定大小的窗口,RESIZABLE窗口尺寸可修改
screen=pygame.display.set_mode(size,RESIZABLE)

#设置窗口的标题
pygame.display.set_caption("初次见面,请多指教")

#加载图片
ocartoon=pygame.image.load("turtle.png")
cartoon=ocartoon
#获取图像的位置矩形
position = cartoon.get_rect()

l_head=cartoon
r_head=pygame.transform.flip(cartoon,True,False)

#设置放大缩小的倍数
ratio = 1.0#每点一次,增加或者减小1倍

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

      if event.type== KEYDOWN:
            if event.key == K_LEFT:
                cartoon=l_head
                speed=[-1,0]
            if event.key == K_RIGHT:
                speed=
                cartoon=r_head
            if event.key == K_UP:
                speed=
            if event.key == K_DOWN:
                speed=

            #全屏,
         
            if event.key == K_F11:
                fullscreen = not fullscreen
                print(resortion)
                if fullscreen:
                  #设置屏幕大小
                  screen = pygame.display.set_mode(resortion,FULLSCREEN | HWSURFACE)
                  width,height= resortion,resortion
                  
                else:
                  screen = pygame.display.set_mode(size)
            #放大缩小尺寸,当鼠标按下+-空格
            if event.key == K_EQUALS or event.key == K_MINUS or event.key == K_SPACE:
                #设置最大只能放大2被
                if event.key == K_PLUS and ratio<3:
                  ratio += 0.1
                if event.key == K_MINUS and ratio>0.5:
                  ratio -= 0.1
                if event.key == K_SPACE:
                  ratio = 1.0
            
                cartoon=pygame.transform.smoothscale(ocartoon,(int(ocartoon_rect.width * ratio),int(ocartoon_rect.height * ratio)))
                l_head=cartoon
                r_head=pygame.transform.flip(cartoon,True,False)


      #用户调整窗口尺寸
      if event.type == VIDEORESIZE:
            size = event.size
            width,height= size,size
            print(size)
            #创建指定大小的窗口,RESIZABLE窗口尺寸可修改
            screen=pygame.display.set_mode(size,RESIZABLE)

                           
    #移动图像
    position = position.move(speed)

    if position.left<0 or position.right > width:
      #反转图像,True表示水平翻转,False表示不垂直翻转
      a_cartoon=pygame.transform.flip(cartoon,True,False)
      #反方向移动
      speed = -speed

    if position.top<0 or position.bottom > height:
      speed = -speed
      
    #填充背景色
    screen.fill(bg)

    #更新图片,blit将一个图像画到另一个图像上去,a_cartoon画到screen)
    screen.blit(cartoon,position)

    # 更新界面
    pygame.display.flip()

    #延迟
    pygame.time.delay(10)
   

Hello. 发表于 2020-4-20 23:02:50

https://zhidao.baidu.com/question/1899516828114237340.html

txxcat 发表于 2020-4-21 02:40:33

程序里两个问题:
一个就是'NameError: name 'ocartoon_rect' is not defined',变量名'ocartoon_rect'没有被定义,很明显这个变量名是错的,分析代码改成:ocartoon.get_rect()就可以运行了。
调试中发现不能放大,发现外面条件是if event.key == K_EQUALS,里面却是if event.key == K_PLUS,把K_PLUS改成 K_EQUALS后运行正常。
下面是修改后的完整代码:

import pygame
import sys   #退出程序时要用
from pygame.locals import *

#初始化pygame,他是一个包
pygame.init()
resortion = pygame.display.list_modes()#获取当前屏幕允许的分辨率

size= width,height = 600,400
speed = [-2,1]   #x每次往左走2,Y向下偏移1格
bg=(255,255,255)   #背景填充为白色

#创建指定大小的窗口,RESIZABLE窗口尺寸可修改
screen=pygame.display.set_mode(size,RESIZABLE)

#设置窗口的标题
pygame.display.set_caption("初次见面,请多指教")

#加载图片
ocartoon=pygame.image.load("turtle.png")
cartoon=ocartoon
#获取图像的位置矩形
position = cartoon.get_rect()

l_head=cartoon
r_head=pygame.transform.flip(cartoon,True,False)

#设置放大缩小的倍数
ratio = 1.0#每点一次,增加或者减小1倍

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

      if event.type== KEYDOWN:
            if event.key == K_LEFT:
                cartoon=l_head
                speed=[-1,0]
            if event.key == K_RIGHT:
                speed=
                cartoon=r_head
            if event.key == K_UP:
                speed=
            if event.key == K_DOWN:
                speed=

            #全屏,
         
            if event.key == K_F11:
                fullscreen = not fullscreen
                print(resortion)
                if fullscreen:
                  #设置屏幕大小
                  screen = pygame.display.set_mode(resortion,FULLSCREEN | HWSURFACE)
                  width,height= resortion,resortion
                  
                else:
                  screen = pygame.display.set_mode(size)
            #放大缩小尺寸,当鼠标按下+-空格
            if event.key == K_EQUALSor event.key == K_MINUS or event.key == K_SPACE:
                #设置最大只能放大2被
                if event.key == K_EQUALS and ratio<3:
                  ratio += 0.1
                if event.key == K_MINUS and ratio>0.5:
                  ratio -= 0.1
                if event.key == K_SPACE:
                  ratio = 1.0
                cartoon=pygame.transform.smoothscale(ocartoon,(int(ocartoon.get_rect().width * ratio),int(ocartoon.get_rect().height * ratio)))
                l_head=cartoon
                r_head=pygame.transform.flip(cartoon,True,False)


      #用户调整窗口尺寸
      if event.type == VIDEORESIZE:
            size = event.size
            width,height= size,size
            print(size)
            #创建指定大小的窗口,RESIZABLE窗口尺寸可修改
            screen=pygame.display.set_mode(size,RESIZABLE)

                           
    #移动图像
    position = position.move(speed)

    if position.left<0 or position.right > width:
      #反转图像,True表示水平翻转,False表示不垂直翻转
      a_cartoon=pygame.transform.flip(cartoon,True,False)
      #反方向移动
      speed = -speed

    if position.top<0 or position.bottom > height:
      speed = -speed
      
    #填充背景色
    screen.fill(bg)

    #更新图片,blit将一个图像画到另一个图像上去,a_cartoon画到screen)
    screen.blit(cartoon,position)

    # 更新界面
    pygame.display.flip()

    #延迟
    pygame.time.delay(10)
   
页: [1]
查看完整版本: 72行,NameError: name 'ocartoon_rect' is not defined