当前位置: 首页 > news >正文

小网站谁有在手机上编写安卓app

小网站谁有,在手机上编写安卓app,网上国网app推广效果,做网站专业公司学习 Python 之 Pygame 开发魂斗罗#xff08;八#xff09;继续编写魂斗罗1. 创建敌人类2. 增加敌人移动和显示函数3. 敌人开火4. 修改主函数5. 产生敌人6. 使敌人移动继续编写魂斗罗 在上次的博客学习 Python 之 Pygame 开发魂斗罗#xff08;七#xff09;中#xff0… 学习 Python 之 Pygame 开发魂斗罗八继续编写魂斗罗1. 创建敌人类2. 增加敌人移动和显示函数3. 敌人开火4. 修改主函数5. 产生敌人6. 使敌人移动继续编写魂斗罗 在上次的博客学习 Python 之 Pygame 开发魂斗罗七中我们解决了一些问题这次我们加入敌人 下面是图片的素材 链接https://pan.baidu.com/s/1X7tESkes_O6nbPxfpHD6hQ?pwdhdly 提取码hdly 1. 创建敌人类 import randomimport pygame from Constants import * from Bullet import Bulletclass Enemy1(pygame.sprite.Sprite):def __init__(self, x, y, direction, currentTime):pygame.sprite.Sprite.__init__(self)self.lastTime currentTimeself.fireTime currentTimeself.rightImages [loadImage(../Image/Enemy/Enemy1/1.png),loadImage(../Image/Enemy/Enemy1/2.png),loadImage(../Image/Enemy/Enemy1/3.png)]self.leftImages [loadImage(../Image/Enemy/Enemy1/1.png, True),loadImage(../Image/Enemy/Enemy1/2.png, True),loadImage(../Image/Enemy/Enemy1/3.png, True)]self.rightFireImage loadImage(../Image/Enemy/Enemy1/fire.png)self.leftFireImage loadImage(../Image/Enemy/Enemy1/fire.png, True)self.fallImage loadImage(../Image/Enemy/Enemy1/fall.png, True)# 图片下标self.index 0# 方向self.direction directionif self.direction Direction.RIGHT:self.image self.rightImages[self.index]else:self.image self.leftImages[self.index]self.rect self.image.get_rect()self.isFalling Falseself.rect.x xself.rect.y yself.speed 3self.isDestroy Falseself.isFiring Falseself.life 1 这里敌人的移动也是三幅图片加载时需要连续显示这三张图片 2. 增加敌人移动和显示函数 def move(self, currentTime):# 首先判断敌人是否开火如果是开火状态就不能移动if not self.isFiring:# 没有开火就根据方向移动这里我设置敌人只能向一个方向移动不能转身if self.direction Direction.RIGHT:self.rect.left self.speedelse:self.rect.left - self.speedelse:# 如果此时是开火状态判断一下上次开火的时间和这次的时间是否相差1000# 这个的作用在于让敌人开火的时候站在那里不动因为敌人移动时是不能开火的if currentTime - self.fireTime 1000:# 如果两次开火间隔相差很大那么就可以让敌人再次开火self.isFiring Falseself.fireTime currentTime这里主要是解决敌人开火不能移动的问题 因为敌人开火是站着不动如果两次开火间隔比较短敌人频繁开火运行游戏后会出现敌人移动就能发射子弹的情况 下面是显示函数这个跟玩家的显示函数差不多 def draw(self, currentTime):if self.isFiring:if self.direction Direction.RIGHT:self.image self.rightFireImageelse:self.image self.leftFireImageelse:if currentTime - self.lastTime 115:if self.index 2:self.index 1else:self.index 0self.lastTime currentTimeif self.direction Direction.RIGHT:self.image self.rightImages[self.index]else:self.image self.leftImages[self.index]有了移动函数就要对敌人位置进行检测当玩家距离敌人1000像素之外后敌人就会自动消失了用来防止敌人过多卡 def checkPosition(self, x, y):if abs(self.rect.x - x) 1000:self.isDestroy Trueelif abs(self.rect.y - y) 600:self.isDestroy True水平相距1000像素后消失垂直相距600像素后消失 3. 敌人开火 def fire(self, enemyBulletList):if not self.isFalling:i random.randint(0, 50)if i 5:if not self.isFiring:self.isFiring TrueenemyBulletList.append(Bullet(self, True))这个函数设置了当敌人处于下落状态时不能开火 开火是随机的随机从0到50产生一个数字如果是5敌人就开火 完整敌人1类代码 import randomimport pygame from Constants import * from Bullet import Bulletclass Enemy1(pygame.sprite.Sprite):def __init__(self, x, y, direction, currentTime):pygame.sprite.Sprite.__init__(self)self.lastTime currentTimeself.fireTime currentTimeself.rightImages [loadImage(../Image/Enemy/Enemy1/1.png),loadImage(../Image/Enemy/Enemy1/2.png),loadImage(../Image/Enemy/Enemy1/3.png)]self.leftImages [loadImage(../Image/Enemy/Enemy1/1.png, True),loadImage(../Image/Enemy/Enemy1/2.png, True),loadImage(../Image/Enemy/Enemy1/3.png, True)]self.rightFireImage loadImage(../Image/Enemy/Enemy1/fire.png)self.leftFireImage loadImage(../Image/Enemy/Enemy1/fire.png, True)self.fallImage loadImage(../Image/Enemy/Enemy1/fall.png, True)self.index 0self.direction directionif self.direction Direction.RIGHT:self.image self.rightImages[self.index]else:self.image self.leftImages[self.index]self.rect self.image.get_rect()self.isFalling Falseself.rect.x xself.rect.y yself.speed 3self.isDestroy Falseself.isFiring Falseself.life 1def move(self, currentTime):# 首先判断敌人是否开火如果是开火状态就不能移动if not self.isFiring:# 没有开火就根据方向移动这里我设置敌人只能向一个方向移动不能转身if self.direction Direction.RIGHT:self.rect.left self.speedelse:self.rect.left - self.speedelse:# 如果此时是开火状态判断一下上次开火的时间和这次的时间是否相差1000# 这个的作用在于让敌人开火的时候站在那里不动因为敌人移动时是不能开火的if currentTime - self.fireTime 1000:# 如果两次开火间隔相差很大那么就可以让敌人再次开火self.isFiring Falseself.fireTime currentTimedef draw(self, currentTime):if self.isFiring:if self.direction Direction.RIGHT:self.image self.rightFireImageelse:self.image self.leftFireImageelse:if currentTime - self.lastTime 115:if self.index 2:self.index 1else:self.index 0self.lastTime currentTimeif self.direction Direction.RIGHT:self.image self.rightImages[self.index]else:self.image self.leftImages[self.index]def fire(self, enemyBulletList):if not self.isFalling:i random.randint(0, 50)if i 5:if not self.isFiring:self.isFiring TrueenemyBulletList.append(Bullet(self, True))def checkPosition(self, x, y):if abs(self.rect.x - x) 1000:self.isDestroy Trueelif abs(self.rect.y - y) 600:self.isDestroy True 由于每个敌人的图片不一样我就分开创建敌人类这个是敌人1类新加入敌人就创建新的敌人类 4. 修改主函数 由于加入了敌人类主函数的碰撞体组需要进行改变 敌人和玩家的碰撞体应该分开因为玩家向下跳的时候上面的碰撞体会消失如果此时有敌人在上面碰撞体一消失敌人就会掉下来这是不对的所以我们要修改原有的碰撞体组 把上图的红框中的代码修改成下面的样子 如果使用Pycharm软件我们按住ctrlR一键替换 然后就换完了 全部还完后的结果 # 冲突 playerLandGroup pygame.sprite.Group() playerColliderGroup pygame.sprite.Group() playerRiverGroup pygame.sprite.Group()现在完成了玩家的碰撞体组 当敌人加入后就要创建敌人的碰撞体组 playerLandGroup pygame.sprite.Group() playerRiverGroup pygame.sprite.Group() enemyLandGroup pygame.sprite.Group() enemyRiverGroup pygame.sprite.Group() playerColliderGroup pygame.sprite.Group() enemyColliderGroup pygame.sprite.Group() enemyGroup pygame.sprite.Group() bridgeGroup pygame.sprite.Group()这是最后的碰撞体组 有敌人的也有玩家的 在原版魂斗罗中第一关是有桥的当玩家走上去后就会爆炸所以这里有桥的碰撞体组 接下来加入敌人列表 # 敌人 enemyList []用来把存放游戏中当前的敌人 5. 产生敌人 好的接下来我们来写创建敌人的函数 def generateEnemy(self, x, y, direction, currentTime):enemy Enemy1(x, y, direction, currentTime)MainGame.enemyList.append(enemy)MainGame.allSprites.add(enemy)MainGame.enemyGroup.add(enemy)在update()函数中我们调用这个函数 # 加载敌人 if -1505 self.backRect.x -1500:self.generateEnemy(MainGame.player1.rect.x 600, POSITION_1, Direction.LEFT, pygame.time.get_ticks())self.generateEnemy(MainGame.player1.rect.x - 360, POSITION_1, Direction.RIGHT, pygame.time.get_ticks())if -1705 self.backRect.x -1700:self.generateEnemy(MainGame.player1.rect.x - 360, POSITION_1, Direction.RIGHT, pygame.time.get_ticks())self.generateEnemy(MainGame.player1.rect.x - 400, POSITION_1, Direction.RIGHT,pygame.time.get_ticks()) 这个代码的意思是当背景加载到-1505到-1500时就会在玩家前方和后方产生两个敌人 同理在-1705到-1700时也会产生两个敌人 在Constants.py中加入下面这个 POSITION_1 233这个表示敌人产生的位置的y坐标位置如下图 就是在当前玩家所站的这个平台上产生敌人如果按照玩家的位置产生敌人当玩家跳跃时敌人可能在空中产生 下面我们运行一下看看敌人有没有出现 敌人出现了但是没有移动这是为什么 因为没有调用敌人的move()函数让敌人移动 6. 使敌人移动 下面我们创建敌人更新函数 def enemyUpdate(enemyList, enemyBulletList):# 遍历整个敌人列表for enemy in enemyList:# 如果敌人已经被摧毁了if enemy.isDestroy:# 删除它的相关信息enemyList.remove(enemy)MainGame.allSprites.remove(enemy)MainGame.enemyGroup.remove(enemy)# 否则else:# 检查位置enemy.checkPosition(MainGame.player1.rect.x, MainGame.player1.rect.y)# 显示敌人enemy.draw(pygame.time.get_ticks())# 敌人移动enemy.move(pygame.time.get_ticks())# 敌人开火enemy.fire(enemyBulletList)这里的有一个参数是敌人子弹列表我们在主类中也创建一下 下面我们调用一下这个函数 之后我们再运行一下游戏看看效果 出现了问题 我们把敌人1类的fire函数开火代码注释一下 出现错误的原因是敌人开火的位置和玩家开火的位置不一样所有我们要在子弹类的构造函数中加入一个变量用来指定当前子弹是敌人子弹还是玩家子弹这里因为我们还没有来得及修改子弹类的代码所有会出错误以后会进行修改的现在先看看敌人能不能加载出来 到这里我们就可以可能敌人出来啦 但是我们看到敌人不会向下掉落这是因为没有给敌人增加碰撞体接下来我们先实现敌人发射子弹然后再实现敌人碰撞体的问题
http://www.w-s-a.com/news/831079/

相关文章:

  • 如何查看网站的更新频率网站图片要求
  • 网站设计公司收费标准wordpress修改文章链接
  • 镇江网站建设公司网站关键词密度怎么计算的
  • c 网站开发公司的网站的设计
  • 网站建设多长时间能学会做网站猫要做端口映射吗
  • 新手做网站视频网页设计期末作品要求
  • 做网站用户充值提现郑州高端模板建站
  • 运城做网站方式方法网站改版完成
  • 上海建设网站制作东西湖建设局网站
  • 建设购物网站课程设计建设部领导干部官方网站
  • 沈阳企业制作网站北京两学一做网站
  • 郑州做营销型网站手机网站建设多少钱一个
  • 小说类网站程序外贸商城 wordpress
  • 喀什百度做网站多少钱wordpress 用户介绍
  • 专门做任务的网站手机端网站重构
  • 深圳专业设计网站公司国际网站建设经验
  • 网站产品页排名怎么做网站备案起名要求
  • 成都企业网站建设及公司ppt生活分类信息网站大全
  • 免费企业网站源码下载学服装设计需要什么条件
  • 淘宝网站开发方式深圳平面设计公司排名榜
  • 品牌网站建设收费情况登陆页面模板
  • 十大免费cms建站系统介绍科技网站欣赏
  • 自学做网站需要多久semir是什么品牌
  • 南通网站搜索引擎优化网站首页seo关键词布局
  • 东莞市国外网站建设多少钱wordpress 多媒体插件
  • c2c商城网站建设公司做水果生意去哪个网站
  • 做网站服务器有哪些电子商务网站建立
  • 网站开发的具体流程原材料价格查询网站
  • 深圳响应式网站建设深圳网站建设定制开发 超凡科技
  • 网站建设报价怎么差别那么大wordpress产品属性搭配