目标:实现子弹的出现位置(为飞机发射做准备),子弹的速度,角度自定义。

添加两个函数

set_post(self, x, y)  #实现 x ,y 坐标出现,这里的坐标是相对于父坐标的。

set_speed(self, speed) #增加自定义的速度。

完成代码如下:

def set_pos(self,x, y):self.rect.x = xself.rect.y = y def set_speed(self,speed, angle = 0):#输入的是角度,转成弧度先self.angle = math.pi * angle/180#self.x_speed = speed * math.oos(self.angle)self.y_speed = speed * math.sin(self.angle)

这里的角度是笛卡尔坐标系里的角度。X 向左,Y 向下。因此垂直向下的角度为 90度,垂直向上的角度为 -90度或者270度。

测试代码如下:

main.py

import pygame
from bullet import *
from sys import exit
import random#定义屏幕类
class MainScene(object):#初始化def __init__(self):self.size = (480,852)self.scene = pygame.display.set_mode(self.size)pygame.display.set_caption("自学飞机大战--V0.98")self.image = pygame.image.load('images/bg.png')self.bullet_sprite = pygame.sprite.Group()bullet1 = Bullet()bullet1.set_pos(200,400)bullet1.set_speed(5,90)bullet2 = Bullet()bullet2.set_pos(300,600)bullet2.set_speed(4,270)self.bullet_sprite.add(bullet1)self.bullet_sprite.add(bullet2)#绘制各个元素def drawElements(self):self.scene.blit(self.image,(0,0))self.bullet_sprite.draw(self.scene)#处理键盘相应def handleEvent(self):for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()#运行主程序def runScene(self):while True:self.drawElements()self.handleEvent()self.bullet_sprite.update()pygame.display.update()if __name__ == '__main__':mainScene = MainScene()mainScene.runScene()

子弹文件 bullet.py

import pygame
import math
import random class Bullet(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load('images/bullet1.png')self.rect = self.image.get_rect()# self.speed = 2self.x_speed = 0.00self.y_speed = 2.00self.angle = 0def update(self):self.rect.x += self.x_speedself.rect.y += self.y_speeddef set_pos(self,x, y):self.rect.x = xself.rect.y = y def set_speed(self,speed, angle = 0):# self.speed = speedself.angle = math.pi * angle/180self.x_speed = speed * math.cos(self.angle)self.y_speed = speed * math.sin(self.angle)

子弹能随意速度,方向,位置了,接下来写飞机?不,还是子弹!

pygame 飞机大战子弹的编写(三)自定义子弹位置、速度、角度相关推荐

  1. pygame飞机大战关于子弹的设计(一)(含源码)

    Exe如下,欢迎试玩! 链接:https://pan.baidu.com/s/1Hw-DP98Jayr-jmE3ZCe9NA 提取码:2xsq 先上图,终极子弹: 我方子弹共有三种模型:基础子弹.双发 ...

  2. Cocos2d-x 3.2 lua飞机大战开发实例(三)道具的掉落,碰撞检测,声音,分数,爆炸效果,完善游戏的功能细节

           Cocos2d-X 3.2  lua语言飞机大战开发实例(三) 7.添加声音,更新分数,添加爆炸效果,道具的掉落.道具的碰撞检测等完善游戏功能 爆炸的效果添加 首先需要在GameData ...

  3. 小甲鱼python游戏代码_【小甲鱼】零基础学习python pygame 飞机大战可执行源代码...

    [实例简介] [小甲鱼]零基础学习python pygame 飞机大战可执行源代码,觉得挺有意思,故此分享. [实例截图] [核心代码] 飞机大战 └── 飞机大战 ├── bullet.py ├── ...

  4. pygame 飞机大战子弹的编写(七)花样年华

    目标:实现子弹的花样玩法,不同的子弹类型(image),不同的发射方式(speed,angle),不同的子弹数量. 前面几篇文字,已经实现了子弹的不同特性,组合下就能开启子弹的花样年华. 想了两个方案 ...

  5. pygame 飞机大战子弹的编写(一)绘制子弹

    目标:子弹出现在屏幕上 先从子弹开始写.子弹是敌机.BOSS机和英雄机都要用到的,涉及到各种花样玩法 定义子弹类. 先简单的定义,建个bullet.py文件,建立Bullet类,从pygame.spr ...

  6. Pygame飞机大战(四)——创建己方飞机的类,并添加子弹吧

    我们接下来要基于pygame.sprite.Sprite创建自己的类,首先必须是主角的,创建一个己方飞机的类,并且给飞机加上子弹哈! 首先我们还是先分析一下,己方飞机需要有哪些部分构成: 自身的图片加 ...

  7. pygame飞机大战用精灵组(sprite)的层(layer)编写(二)BOSS登场了

    BOSS的编写方式是最复杂的,编写完这个,其他的飞机都是小菜. 先从BOSS的动态图形开始吧. 大部分的飞机一张从头到尾一张图片解决,也不觉得怎么样,但是BOSS就是得有BOSS的样子,自拍也比别人多 ...

  8. pygame 飞机大战碰撞检查的运用(三)用sprite,实现完美碰撞检查

    目标:实现完美的碰撞检查 前面的只是普通的碰撞检查,用到了矩形框的范围.图像如果都不是矩形,用普通检查,两种已经相碰,但画面显示还未相碰,这就很尴尬了. sprite模块中,有个collide_mas ...

  9. pygame 飞机大战 让子弹再飞一会儿

    我转载的飞机大战文章中,由于只是采用飞机或子弹的属性进行隐藏,在子弹和飞机较少时,不影响游戏体验.但当有大量敌机,大量子弹时候,由于需要每次都遍历 list,会卡的动不了.只能采取删除措施了. 在子弹 ...

最新文章

  1. 【OpenCV 4开发详解】图像与视频的保存
  2. oracle ohs是什么,怎么更改OHS端口为80
  3. TCP/IP详解--第五章
  4. JQuery获取元素的N种方法
  5. Java并发编程-ReentrantLock源码分析
  6. redis简单队列java_使用Redis的简单消息队列
  7. [react] react中的setState和replaceState的区别是什么?
  8. 实例1:python
  9. 揭示地理数据分布规律的方法
  10. Java的native方法java.lang.UnsatisfiedLinkError
  11. 通过DBLINK跨数据库查询,同步创建表结构,插入表数据
  12. Dialog是逻辑字体,实际绘制时会选择不同字体
  13. 20120329_dmp 文件导入ibm p750-2个LPAR 小机知识点
  14. 引入jackson-dataformat-xml的影响
  15. 腾讯云服务器怎么增加容量,腾讯云服务器磁盘扩容问题小记
  16. 最近邻搜索算法flann Marius Muja and David G. Lowe
  17. 魔板(最小步数模型)
  18. java 地图渲染_MapXtreme for java 地图渲染
  19. android wifi热点默认名称,Android 修改WiFi热点的默认SSID和密码
  20. 使用Tensorflow实现声纹识别

热门文章

  1. 平面直角坐标系中的旋转公式_九年级数学旋转复习
  2. Parsing error: missing-semicolon-after-character-reference.
  3. 如何从API中获取数据(一)
  4. 眼底影像血管分割(一):选择通道
  5. 【附源码】计算机毕业设计JAVA至臻阁古董拍卖网
  6. 解决端口被进程占用 xxx port is already in use
  7. NET-A-PORTER为何难以模仿?_全文显示_生活福布斯中文网
  8. Android即时通信软件设计(一)(网络通信)
  9. 使用XGBClassifier出现Dataset is empty, or contains only positive or negative samples.错误
  10. 智能多媒体会议室实施方案分析