请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生

【Pygame 第5课】 游戏中的运动

[复制链接]

0

主题

0

好友

200

积分

中级会员

Rank: 3Rank: 3

发表于 2015-12-26 13:41:42 |显示全部楼层
  1. # -*- coding: utf-8 -*-
  2. import pygame
  3. from sys import exit
  4. pygame.init()
  5. screen = pygame.display.set_mode((450,800),0,32)
  6. pygame.display.set_caption('Hello World')

  7. #加载需要的图片
  8. background = pygame.image.load('f:\plane\some.jpg')
  9. plane = pygame.image.load('f:\plane\plane.png').convert_alpha()
  10. bullet = pygame.image.load('f:\plane\sullet.png')

  11. #初始化子弹位置
  12. bullet_x = 0
  13. bullet_y = -1
  14. bullet_left_x = 0
  15. bullet_left_y = -1
  16. bullet_right_x = 0
  17. bullet_right_y = -1

  18. #开始游戏循环
  19. while True:
  20.     for event in pygame.event.get():
  21.         if event.type == pygame.QUIT:
  22.             pygame.quit()
  23.             exit()
  24.     #创建背景窗口
  25.     screen.blit(background,(0,0))
  26.     x,y = pygame.mouse.get_pos()
  27.    
  28.     #获取左、右两个子弹起始点位置
  29.     left_x = x - plane.get_width() / 3
  30.     left_y = y
  31.     right_x = x + plane.get_width() / 3
  32.     right_y = y
  33.    
  34.     if bullet_y < 0:
  35.         bullet_x = x - bullet.get_width() / 2
  36.         bullet_y = y - bullet.get_height() / 2
  37.         #把子弹图片的中心设置为鼠标坐标
  38.     else:
  39.         bullet_y -= 5

  40.     if bullet_left_y < 0:
  41.         bullet_left_x = left_x - bullet.get_width() / 2
  42.         bullet_left_y = left_y - bullet.get_height() / 2
  43.     else:
  44.         bullet_left_y -= 5

  45.     if bullet_right_y < 0:
  46.         bullet_right_x = right_x - bullet.get_width() / 2
  47.         bullet_right_y = right_y - bullet.get_height() / 2
  48.     else:
  49.         bullet_right_y -= 5

  50.    
  51.     #加载3个子弹图片
  52.     screen.blit(bullet,(bullet_x,bullet_y))
  53.     screen.blit(bullet,(bullet_left_x,bullet_left_y))
  54.     screen.blit(bullet,(bullet_right_x,bullet_right_y))
  55.    
  56.     #把飞机图片的中心设置为鼠标坐标
  57.     x-= plane.get_width() / 2
  58.     y-= plane.get_height() / 2
  59.     screen.blit(plane,(x,y))
  60.     pygame.display.update()
复制代码
回复

使用道具 举报

0

主题

0

好友

200

积分

中级会员

Rank: 3Rank: 3

发表于 2015-12-26 13:47:22 |显示全部楼层
先生先生看我的\(^o^)/~三行子弹最霸气

77D8.tmp.jpg
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-12-26 18:24:25 |显示全部楼层
周末晒被子 发表于 2015-12-26 13:47
先生先生看我的\(^o^)/~三行子弹最霸气

举一反三
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

200

积分

中级会员

Rank: 3Rank: 3

发表于 2015-12-27 15:32:28 |显示全部楼层

先生,我发现我的代码子弹的往上移动的幅度,和先生的一样,同样是 y -= 5 ,但是运行后发现,先生的代码(就是本节课的代码)的子弹很快——仅仅能看见影子,而我的子弹就是一只略快的蚂蚁,窗口一样是(450,800)。

我修改一下自己的子弹上移幅度,发现我的代码 y -= 50 左右才相当于先生的子弹速度。
不应该啊。
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-12-27 20:46:14 |显示全部楼层
周末晒被子 发表于 2015-12-27 15:32
先生,我发现我的代码子弹的往上移动的幅度,和先生的一样,同样是 y -= 5 ,但是运行后发现,先生的代 ...

不可能所有代码都一样,执行出来不一样吧。肯定有哪里不同,你分析下不一样的代码。
我猜测,大概是因为帧率不一样,我的代码帧率快,所以每帧5像素就很快了。你的代码里,可能因为某些原因导致帧率较低
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

200

积分

中级会员

Rank: 3Rank: 3

发表于 2015-12-28 09:38:10 |显示全部楼层
找到原因了,奇怪。

加载这两张图片的时候,我的是这样:
background = pygame.image.load('f:\plane\some.jpg')
bullet = pygame.image.load('f:\plane\sullet.png')
而先生的是这样:
background = pygame.image.load('f:\plane\some.jpg').convert()
bullet = pygame.image.load('f:\plane\sullet.png').convert_alpha()

应该是背景图片 background = pygame.image.load('f:\plane\some.jpg').convert() 的问题。这个会影响帧率吗?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2015-12-28 16:22:05 |显示全部楼层
周末晒被子 发表于 2015-12-28 09:38
找到原因了,奇怪。

加载这两张图片的时候,我的是这样:

会的。你去搜索一下 pygame convert ,了解它的作用
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

200

积分

中级会员

Rank: 3Rank: 3

发表于 2016-1-8 01:55:21 |显示全部楼层
crossin先生 发表于 2015-12-28 16:22
会的。你去搜索一下 pygame convert ,了解它的作用

mark,查了就回来写心得。
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

发表于 2016-1-13 13:30:41 |显示全部楼层
刚开始学编程,来这里学习学习
回复

使用道具 举报

0

主题

1

好友

273

积分

中级会员

Rank: 3Rank: 3

发表于 2016-2-1 14:28:21 |显示全部楼层
加了一些限制让飞机不飞出窗外,外加从飞机中心飞出的三行子弹,做出来好有成就感呀~~
Python28.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-18 19:52 , Processed in 0.030446 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部