鱼C论坛

 找回密码
 立即注册
查看: 641|回复: 2

[已解决]72行,NameError: name 'ocartoon_rect' is not defined

[复制链接]
发表于 2020-4-20 22:33:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 猪猪虾 于 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=[1,0]
                cartoon=r_head
            if event.key == K_UP:
                speed=[0,-1]
            if event.key == K_DOWN:
                speed=[0,1]

            #全屏,
           
            if event.key == K_F11:
                fullscreen = not fullscreen
                print(resortion[0])
                if fullscreen:
                    #设置屏幕大小
                    screen = pygame.display.set_mode(resortion[0],FULLSCREEN | HWSURFACE)
                    width,height= resortion[0][0],resortion[0][1]
                    
                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[0],size[1]
            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[0] = -speed[0]

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

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

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

    #延迟
    pygame.time.delay(10)
    
最佳答案
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=[1,0]
                cartoon=r_head
            if event.key == K_UP:
                speed=[0,-1]
            if event.key == K_DOWN:
                speed=[0,1]

            #全屏,
           
            if event.key == K_F11:
                fullscreen = not fullscreen
                print(resortion[0])
                if fullscreen:
                    #设置屏幕大小
                    screen = pygame.display.set_mode(resortion[0],FULLSCREEN | HWSURFACE)
                    width,height= resortion[0][0],resortion[0][1]
                    
                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_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[0],size[1]
            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[0] = -speed[0]

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

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

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

    #延迟
    pygame.time.delay(10)
    
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-20 23:02:50 | 显示全部楼层
https://zhidao.baidu.com/question/1899516828114237340.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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=[1,0]
                cartoon=r_head
            if event.key == K_UP:
                speed=[0,-1]
            if event.key == K_DOWN:
                speed=[0,1]

            #全屏,
           
            if event.key == K_F11:
                fullscreen = not fullscreen
                print(resortion[0])
                if fullscreen:
                    #设置屏幕大小
                    screen = pygame.display.set_mode(resortion[0],FULLSCREEN | HWSURFACE)
                    width,height= resortion[0][0],resortion[0][1]
                    
                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_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[0],size[1]
            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[0] = -speed[0]

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

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

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

    #延迟
    pygame.time.delay(10)
    
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 16:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表