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

Crossin的编程教室

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

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

[复制链接]

0

主题

0

好友

8

积分

新手上路

Rank: 1

发表于 2018-1-8 16:10:33 |显示全部楼层
求助!

为啥代码完全照抄之后
screen.blit(bullet1, (bullet1_x, bullet1_y)) 这一行会报错呢?
系统说是“invalid syntax”
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2018-1-8 16:19:28 |显示全部楼层
语法错误,肯定是抄错了,少了括号之类,或者用了中文符号
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

28

积分

新手上路

Rank: 1

发表于 2018-1-17 15:45:26 |显示全部楼层
飞机对打
  1. # -*- coding:utf-8 -*-
  2. from sys import exit

  3. import pygame

  4. pygame.init()
  5. screen = pygame.display.set_mode((450, 800), 0, 32)
  6. pygame.display.set_caption("Hello, World!")
  7. sky = pygame.image.load('back.jpg').convert()
  8. plane = pygame.image.load('plane.png').convert_alpha()
  9. bullet = pygame.image.load('bullet.png').convert_alpha()
  10. # 加载子弹图像

  11. plane_enemy = pygame.image.load('plane_rev.png').convert_alpha()
  12. # 加载敌军战机图像
  13. bullet_enemy = pygame.image.load('bullet_rev.png').convert_alpha()
  14. # 加载敌军子弹图像


  15. bullet_x = 0
  16. bullet_y = -1
  17. # 设置我方子弹初始位置

  18. bullet_enemy_x = 225-bullet.get_width() / 2
  19. bullet_enemy_y = 801
  20. # 设置敌方子弹初始位置

  21. plane_enemy_x = 225-plane_enemy.get_width() / 2
  22. plane_enemy_y = 0
  23. # 设置敌方战机初始位置

  24. while True:
  25.     for event in pygame.event.get():
  26.         if event.type == pygame.QUIT:
  27.             pygame.quit()
  28.             exit()
  29.     screen.blit(sky, (0, 0))
  30.     screen.blit(plane_enemy, (plane_enemy_x, plane_enemy_y))
  31.     # 把敌方战机画到屏幕上
  32.     x, y = pygame.mouse.get_pos()
  33.     # 我方战机运动情况
  34.     if bullet_y < 0:
  35.         # 如果子弹位置超出了屏幕上端
  36.         bullet_x = x - bullet.get_width() / 2
  37.         bullet_y = y - bullet.get_height() / 2
  38.         # 把子弹位置往上移
  39.     else:
  40.         bullet_y -= 5
  41.     screen.blit(bullet, (bullet_x, bullet_y))
  42.     # 把子弹画到屏幕上
  43.     x -= plane.get_width() / 2
  44.     y -= plane.get_height() / 2
  45.     screen.blit(plane, (x, y))

  46.     # 敌方战机运动情况
  47.     if bullet_enemy_y > 800:
  48.         # 如果敌方子弹超出了屏幕下方
  49.         bullet_enemy_x = 225 - bullet.get_width() / 2
  50.         bullet_enemy_y = 0 - bullet.get_height() / 2
  51.     else:
  52.         bullet_enemy_y += 5
  53.     screen.blit(bullet_enemy,(bullet_enemy_x,bullet_enemy_y))
  54.     #把敌方子弹画到屏幕上


  55.     pygame.display.update()
复制代码
TIM截图20180117154309.jpg
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2018-1-18 11:10:24 |显示全部楼层
calf_in_cup 发表于 2018-1-17 15:45
飞机对打

有意思
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

6

主题

0

好友

166

积分

注册会员

Rank: 2

发表于 2018-11-13 16:59:55 |显示全部楼层
  1. # !/usr/bin/python
  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('plane')

  7. background = pygame.image.load('back.jpg').convert()
  8. plane = pygame.image.load('plane.png').convert_alpha()
  9. bullet = pygame.image.load('bullet.png').convert_alpha()
  10. bullet1=bullet
  11. #加载子弹图像

  12. width=plane.get_width()/2
  13. height=plane.get_height()/2

  14. bullet_x=0
  15. bullet_y=-1
  16. bullet1_x=0
  17. bullet1_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.     screen.blit(background, (0,0))

  25.     x, y = pygame.mouse.get_pos()
  26.     if bullet_y <0:
  27.         #如果子弹位置超出了屏幕上端
  28.         bullet_x = x - bullet.get_width() / 2 -23
  29.         bullet_y = y - bullet.get_height() / 2
  30.         bullet1_x = x - bullet.get_width() / 2 + 25
  31.         bullet1_y = y - bullet.get_height() / 2
  32.         #把子弹的中心位置设为鼠标坐标
  33.     else:
  34.         bullet_y -= 5
  35.         bullet_y -= 5
  36.         #子弹位置上移
  37.     screen.blit(bullet,(bullet_x,bullet_y))
  38.     screen.blit(bullet1,(bullet1_x,bullet1_y))
  39.     #把子弹画到屏幕上
  40.     if y>=800-height:
  41.         if x<width:
  42.             screen.blit(plane,(0,800-2*height))
  43.         elif x>450-width:
  44.             screen.blit(plane,(450-2*width,800-2*height))
  45.         else:
  46.             screen.blit(plane,(x-width,800-2*height))
  47.     elif y<height:
  48.         if x<width:
  49.             screen.blit(plane,(0,0))
  50.         elif x>450-width:
  51.             screen.blit(plane,(450-2*width,0))
  52.         else:
  53.             screen.blit(plane,(x-width,0))
  54.     else:
  55.         if x<width:
  56.             screen.blit(plane,(0,y-height))
  57.         elif x>450-width:
  58.             screen.blit(plane,(450-2*width,y-height))
  59.         else:
  60.             screen.blit(plane,(x-width,y-height))  
  61.     pygame.display.update()
复制代码
老师,为什么我左右两边的子弹的射速不一样,左边的快
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2018-11-13 20:23:35 |显示全部楼层
东东哥 发表于 2018-11-13 16:59
老师,为什么我左右两边的子弹的射速不一样,左边的快

    else:
        bullet_y -= 5
        bullet_y -= 5
        #子弹位置上移

写错了吧

既然左右子弹不一样,就找代码里关于左右子弹的代码查
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

6

主题

0

好友

166

积分

注册会员

Rank: 2

发表于 2018-11-14 15:25:44 |显示全部楼层
crossin先生 发表于 2018-11-13 20:23
else:
        bullet_y -= 5
        bullet_y -= 5

粗心了
回复

使用道具 举报

0

主题

1

好友

34

积分

新手上路

Rank: 1

发表于 2019-12-17 14:08:38 |显示全部楼层
先生教我,
问题:子弹太长了。。。。求教,原因出在哪里
[img][/img] 问题图片.png


代码:
# -*- coding: utf-8 -*-
import pygame
#导入pygame
from sys import exit
import time
#sys模块借一个exit函数用来退出程序
pygame.init()
#初始化pygame,为使用硬件做准备
screen = pygame.display.set_mode((600, 419), 0, 32)
#创建了一个窗口,窗口大小和背景图片大小一样
pygame.display.set_caption("Hello, hahaha!")
#设置窗口标题
pic_a='pygame_pic.png'
pic_b='pygame_pic2.png'
pic_c='pygame_pic3.jpg'
pic_all=[pic_a,pic_b,pic_c]
pic_num=3
background = pygame.image.load(pic_all[pic_num%3]).convert()
plane = pygame.image.load('plane.png').convert_alpha()
bullet=pygame.image.load('bullet.png').convert_alpha()
x_bullet = 0
y_bullet = -1
while True:
#游戏主循环

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            pic_num+=1
            background = pygame.image.load(pic_all[pic_num%3]).convert()
            width=background.get_width()
            height=background.get_height()
            screen = pygame.display.set_mode((width, height), 0, 32)
        screen.blit(background, (0, 0))
    x, y = pygame.mouse.get_pos()
    # 获取鼠标位置
    # 计算飞机的左上角位置
    if y_bullet < 0:
        x_bullet = int(x - bullet.get_width()/2)
        y_bullet = int(y - bullet.get_height()/2)
    else:
        y_bullet -= 0.2
    screen.blit(bullet, (x_bullet, y_bullet))  # 把子弹画到屏幕上
    x -= int(plane.get_width() / 2)
    y -= int(plane.get_height() / 2)
    screen.blit(plane, (x, y))  # 将背景图画上去
    #加载并转换图像
    pygame.display.update()#刷新一下画面
回复

使用道具 举报

0

主题

1

好友

34

积分

新手上路

Rank: 1

发表于 2019-12-17 14:31:24 |显示全部楼层
PMCoding 发表于 2019-12-17 14:08
先生教我,
问题:子弹太长了。。。。求教,原因出在哪里
[/img]

看了前面的同学反馈,好像是帧率的问题,运行其他同学的双发子弹的代码,子弹射出来很顺畅,我的代码原地射出来就是一条线,换个地方之前的子弹那条线还在
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2019-12-17 16:06:56 |显示全部楼层
PMCoding 发表于 2019-12-17 14:31
看了前面的同学反馈,好像是帧率的问题,运行其他同学的双发子弹的代码,子弹射出来很顺畅,我的代码原地 ...

screen.blit(background, (0, 0))

这句话的缩进不对,导致背景没有重绘制
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

GMT+8, 2024-5-22 14:04 , Processed in 0.021625 second(s), 25 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部