小学生python游戏编程arcade----敌人精灵上方显示方框及子弹显示问题

前言

接上篇文章继续解绍arcade游戏编程的基本知识。敌人精灵上方显示方框及子弹显示问题

1、敌人精灵上方显示方框

1.1 修改enemy_tank类
def draw_word(self, x, y, owner,fcolor=arcade.csscolor.GREEN, fsize=18, text=None):
    color1 = (128, 138, 135)
    # 参数:距形中心位置,宽,高,颜色,线宽
    rect = arcade.create_rectangle(x, y, 200, 60, color1)
    owner.append(rect)
    if text:
        arcade.draw_text(text, x, y, fcolor, fsize)
    else:
        arcade.draw_text(self.word, x, y, fcolor, fsize)
1.2 引用
    self.shapes.draw()
    for aa in self.scene[LAYER_tanks]:
        aa.draw_word(aa.left, aa.top + 20, self.shapes)
1.3 效果图

在这里插入图片描述

2、调整方法

2.1 类方法
    def draw_word(self, x, y, fcolor=arcade.csscolor.GREEN, fsize=18, text=None):
        xs=fsize
        if text:
            arcade.draw_rectangle_filled(x+len(self.word)*xs//2-10,y+5,len(text)*xs,30,(128,138,135))
            arcade.draw_text(text, x, y, fcolor, fsize)

        else:
            arcade.draw_rectangle_filled(x+len(self.word)*xs//2-10,y+5,len(self.word)*xs, 30,(128,138,135))
            arcade.draw_text(self.word, x, y, fcolor, fsize)

2.2 类的引用
    for aa in self.scene[LAYER_tanks]:
        aa.draw_word(aa.left, aa.top + 20)
2.3 效果图

在这里插入图片描述

2.4 大小位置调整后

在这里插入图片描述

3、子弹过线自动消失

3.1 子弹的更新中
            # 如过子弹超过屏幕则删掉.
            if (bullet.right < 0) or (bullet.bottom > SCREEN_height) or (
                    bullet.left > (self.tile_map.width * self.tile_map.tile_width) * TILE_Scaling) :
                bullet.remove_from_sprite_lists()

3.2 原因查到,把以下代码调为如下
            # 如过子弹超过地图则删掉.
            if (bullet.right < 0) or (bullet.bottom > self.top_of_map) or (
                    bullet.left > self.end_of_map):
                bullet.remove_from_sprite_lists()
3.3 效果图

在这里插入图片描述

3.3 重要提示

所有物品的坐标位置与相机移动无关
定义个相机左及下边距,鼠标点击时的位置需与此两值相加

        # 定义一个相机边框的左边距离
        left_boundary = self.view_left + (self.camera.viewport_width / 2)
        if self.wanjia.center_x < left_boundary:
            self.view_left -= left_boundary - self.wanjia.center_x
        else:
            self.view_left += self.wanjia.center_x - left_boundary

        top_boundary = self.view_bottom + (self.camera.viewport_height / 2)
        if self.wanjia.center_y < top_boundary:
            self.view_bottom -= top_boundary - self.wanjia.center_y
        else:
            self.view_bottom += self.wanjia.center_y - top_boundary

源码获取

关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主

今天是以此模板持续更新此育儿专栏的第 30/50次。
可以关注我,点赞我、评论我、收藏我啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息化未来

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值