小白@HUST

pygame中控制飞船上下左右运动问题

创建飞船左右移动的能力之后,想继续创建飞船上下移动的能力,可是出现问题,先贴上代码片段

#飞船属性
import pygame
class Ship():"""docstring for Ship"""def __init__(self, ai_settings,screen):#初始化飞船并设置其初始位置self.screen=screenself.ai_settings=ai_settings#加载飞船图像并获取其外接矩形self.image=pygame.image.load('images/ship.bmp')self.rect=self.image.get_rect()self.screen_rect=screen.get_rect()#将每艘新飞船放在屏幕底部中央self.rect.centerx=self.screen_rect.centerxself.rect.bottom=self.screen_rect.bottomself.rect.centery=self.screen_rect.centery#在飞船的属性center中存储小数值self.centerx=float(self.rect.centerx)self.centery=float(self.rect.centery)#移动标志self.moving_right=Falseself.moving_left=Falseself.moving_up=Falseself.moving_down=Falsedef update(self):"""根据移动标志调整飞船的位置"""if self.moving_right and self.rect.right<self.screen_rect.right:self.centerx+=self.ai_settings.ship_speed_factorif self.moving_left and self.rect.left>0:self.centerx-=self.ai_settings.ship_speed_factorif self.moving_down and self.rect.down<self.screen_rect.down:self.centery+=self.ai_settings.ship_speed_factorif self.moving_up and self.rect.up>0:self.centery-=self.ai_settings.ship_speed_factorself.rect.centerx=self.centerxself.rect.centery=self.centerydef blitme(self):"""在指定的位置绘制飞船"""self.screen.blit(self.image,self.rect)```#控制
import sys
import pygame
from bullet import Bullet
def check_keydown_events(event,ai_settings,screen,ship,bullets):"""响应按键"""if event.key==pygame.K_RIGHT:ship.moving_right=Trueelif event.key==pygame.K_LEFT:ship.moving_left=Trueelif event.key==pygame.K_UP:ship.moving_up=Trueelif event.key==pygame.K_DOWN:ship.moving_down=Trueelif event.key==pygame.K_SPACE:fire_bullet(ai_settings,screen,ship,bullets)
def fire_bullet(ai_settings,screen,ship,bullets):if len(bullets)<ai_settings.bullets_allowed:new_bullet=Bullet(ai_settings,screen,ship)bullets.add(new_bullet)
def check_keyup_events(event,ship):if event.key==pygame.K_RIGHT:ship.moving_right=Falseelif event.key==pygame.K_LEFT:ship.moving_left=Falseelif event.key==pygame.K_UP:ship.moving_up=Falseelif event.key==pygame.K_DOWN:ship.moving_down=False
==def check_events(ai_settings,screen,ship,bullets):=="""响应按键和鼠标事件"""for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit()elif event.type==pygame.KEYDOWN:check_keydown_events(event,ai_settings,screen,ship,bullets)elif event.type==pygame.KEYUP:check_keyup_events(event,ship)
def update_screen(ai_settings,screen,ship,bullets):"""更新屏幕上的图像,并切换到新屏幕"""#每次循环时都重绘屏幕screen.fill(ai_settings.bg_color)for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()#让最近绘制的屏幕可见pygame.display.flip()
def update_bullets(bullets):bullets.update()for bullet in bullets.copy():if bullet.rect.bottom<=0:bullets.remove(bullet)```#炮弹属性
import pygame
from pygame.sprite import Sprite
class Bullet(Sprite):def __init__(self,ai_settings,screen,ship):super(Bullet,self).__init__()self.screen=screenself.rect=pygame.Rect(0,0,ai_settings.bullet_width,ai_settings.bullet_height)self.rect.centerx=ship.rect.centerxself.rect.top=ship.rect.topself.y=float(self.rect.y)self.color=ai_settings.bullet_colorself.speed_factor=ai_settings.bullet_speed_factordef update(self):self.y -= self.speed_factorself.rect.y = self.ydef draw_bullet(self):pygame.draw.rect(self.screen,self.color,self.rect)炮弹的rect使用了Rect
后面在mac的终端运行时提示
Traceback (most recent call last):File "alien_invasion.py", line 24, in <module>run_game()File "alien_invasion.py", line 21, in run_gameship.update()File "/Users/wuu/Desktop/py/ship.py", line 32, in updateif self.moving_up and self.rect.up>0:
==AttributeError: 'pygame.Rect' object has no attribute 'up'==大神们能不能帮我看一看,第一次发帖,不是很熟练,代码有点麻烦,谢谢啦

pygame控制飞船上下左右移动相关推荐

  1. 用计算机来控制飞船在太空中运行,神舟飞船在太空中靠什么动力运行

    与汽车和飞机都靠发动机的推力前进一样,神舟飞船在太空中运行也是靠发动机推动的.所不同的是汽车和飞机上的发动机是依靠油料与空气中的氧气混合燃烧,产生气体推力,因此,它们都离不开空气中的氧气.而飞船上的发 ...

  2. Pygame 轨道飞船实现飞船绕行星旋转

    源代码 import math,random,sys,time import pygame from pygame.locals import * class Point(object):def __ ...

  3. 基于pygame的飞船大战外星人游戏

    作为一名热爱玩游戏且正在学习Python的小白,自然对"做游戏"产生了浓厚的兴趣.正好<Python从入门到实践>一书中有一个游戏项目,自己便拿来边学边练手. 真正自己 ...

  4. pygame 外星人飞船开发摘要

    继承 # ship继承于Sprite(父类) class Ship(Sprite): 参考:https://blog.csdn.net/qq_38787214/article/details/8790 ...

  5. pygame中人物上下左右移动及翻转,背景透明化

    所谓人物的移动,其实就是让我们原绘制的图片不再显示,再要移动的地方绘制一个新的图片.这里我们用这只小猫的图片来代替人物角色.再选取人物角色图片时,建议大家采取正方形大小的尺寸,方便后面的坐标计算,背景 ...

  6. pygame 图像--键盘上下左右

    将图像初始在窗口中心位置, 不然就会初始在左上角 # 初始窗口中心 ship_rect.center = screen_rect.center 监控键盘 上下左右 import sys import ...

  7. Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发《赵云要格斗》(1)

      这里是Evankaka的博客,欢迎大家前面讨论与交流------      转载请注明出处http://blog.csdn.net/evankaka/article/details/4204350 ...

  8. Cocos2d-x虚拟摇杆控制精灵上下左右运动之————“赵云要格斗”(1)

    转载请注明出处http://blog.csdn.net/evankaka/article/details/42043509 有需要源代码和材料的邮箱留个,这里实现了能通过虚拟摇杆控制精灵的运动,而且能 ...

  9. CSS 控制元素 上下左右居中

    此文章为转载,目的是自己好参考 左右居中:  #method. -->. margin:0 auto;  View Code 效果图: 上下居中:  在介绍方法之前,我先声明一下, 这里的 上下 ...

最新文章

  1. 三级火箭力助搜狗快速盈利
  2. 计算机硬件加速怎么开,显卡硬件加速,小编教你电脑怎么开启显卡硬件加速
  3. 一图理解M0不同优先级中断及Pendsv切换
  4. 通向财务自由之路01_导读
  5. OnScrollListener
  6. android 主界面 布局,Android用户界面与View/ViewGroup
  7. 苹果手机显示没有连接服务器怎么办啊,苹果手机更新连接到服务器出现问题怎么办...
  8. OKEx徐坤:构建核心壁垒,拓展全球市场
  9. 测评2.0关于安全通信网络三级等保测评项
  10. 全天下最经典的句子,2013重现!
  11. Qt编写安防视频监控系统55-布局方案
  12. 思科、华为交换机链路聚合(LACP)配置实例
  13. 如何用纯前端去写购物车_索尼商城购物车
  14. 更改电脑软件默认安装位置
  15. Python算法--查找兄弟单词
  16. 注册免费的外贸B2B平台有什么作用
  17. 工程图学及计算机绘图第3版答案,工程制图习题集孙培先主编答案求电子版
  18. 微信小程序和uniapp高频面试题
  19. ORACLE 表空间不足与用户配额(限额)不足的问题解决
  20. windows的pagefile.sys是什么文件?pagefile.sys文件太大如何移动到D盘中?

热门文章

  1. A*算法实现猎人渡河问题
  2. 建造者模式(Builder)——从组装电脑开始
  3. 获得A股数据的交易接口代码
  4. 《Effective C++》 笔记
  5. 红米k20pro鸿蒙系统,小米红米K20 Pro没信号怎么办?
  6. 手把手教你做一个最最最简单的爱心飘落动画
  7. 数据可视化不再难!这有一份国寿财险的实践经验
  8. 【人体绘画】Q版萌漫人体比例及人体姿势学习大揭秘!
  9. 大数据核心技术与应用论坛落幕 各路大伽云集畅谈产业
  10. 基于大数据的python爬虫的菜谱美食食物推荐系统