V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
june4
V2EX  ›  游戏开发

2D 游戏中的长子弹(比如闪电)是怎么绘制的?

  •  
  •   june4 · 1 天前 · 3426 次点击

    游戏萌新,和小孩一起从头 js+canvas 无框架写个塔防游戏。

    那些短子弹(类似圆型)好说,直接用图片就行了,但我看别的塔防有长的子弹,会拉得很长(就是长度不固定,从塔可以直接拉伸到目标,比如闪电之类),这些直接用个长图片就不行了吧?会有拉伸变形。那这些子弹通常是怎么画出来的呢?

    21 条回复    2025-07-08 17:00:28 +08:00
    kapaseker
        1
    kapaseker  
       1 天前
    复制像素啊。。。中间的像素是复制的。Android 中是.9 patch 图片,游戏中应该是 tilemap 这种做法吧。
    alexsz
        2
    alexsz  
       1 天前
    目标在移动,射击方向不固定
    应该需要旋转和伸缩计算,动态的
    bli22ard
        3
    bli22ard  
       1 天前
    子弹两头中间,分为三张图, 中间还可以分为各种花纹, 然后拼接。这个思路可以发散一下
    mon6912640
        4
    mon6912640  
       1 天前
    淘宝找闪电素材,找几段小段的不同形态的闪电 png ,然后实例化时候计算主角和敌人的距离,根据这个距离实例化几段随机闪电,这样的效果看起来会比较真实,实现上也比较简单
    darklinden
        5
    darklinden  
       1 天前   ❤️ 1
    单个长图片不行用多个啊,sprite frame animation 多帧图片动画
    拉伸变形没问题,只需要你的像素精度拉伸之后可以接受就行
    直接搜索闪电相关的游戏素材即可,本来就糊拉伸完快速闪过味儿就对了
    比如大名鼎鼎的 itch.io/game-assets/tag-lightning
    dosmlp
        6
    dosmlp  
       1 天前
    着色器就可以做
    zuosiruan
        7
    zuosiruan  
       1 天前 via iPhone   ❤️ 3
    @dosmlp 人家带小朋友做的 你这一下搞得人家小朋友直接撂挑子了
    lyzz0612
        8
    lyzz0612  
       1 天前
    图片变长不是只有拉伸变形,还可以九宫格、图片重复
    Hypn0s
        9
    Hypn0s  
       1 天前
    1. 如果你基于 WebGL Context ,可以试着配合 AI 写 shader ,图片拉长然后用 repeat 的方式填充
    2. 如果是基于 Canvas Context 的,那就拼图片,或者用 Graphic 画
    june4
        10
    june4  
    OP
       1 天前
    @darklinden 感谢。就这个方法了。
    funcman
        11
    funcman  
       1 天前
    现在就算 2D 游戏也没必要按位图帧动画的思维去做。
    june4
        12
    june4  
    OP
       1 天前
    @funcman 更好的做法是什么呢?
    lpe234
        13
    lpe234  
       1 天前
    关注一下 希望后面分享一下。等我儿子长大了我也教他
    sparklee
        14
    sparklee  
       1 天前
    动态绘制, 粒子生成, 就是用足够多的点
    darklinden
        15
    darklinden  
       1 天前
    说 repeat 也好,九宫格也好,能填出闪电的麻烦帖张图先
    另一种做法是 shander 自绘,webgl 支持 glsl shader , 单线+噪声+随时间变化就可以搓出闪电。但是你用没用 webgl 不知道。
    想搓游戏玩建议还是上引擎,站别人肩膀上和自己从 0 到 1 搓,工作量还是差异巨大的
    laminux29
        16
    laminux29  
       1 天前
    楼上所有回答,都本末导致了。

    建议先了解一下,游戏软硬件的发展历史,早期的硬件游戏机,画面是由游戏机设备上的固定槽位,加上动态的像素点组成。而纯软件游戏,则是像素点 + 线条组成。对,就是这么朴实无华。

    如果你想美观一点,人物形象可以用 png 背景透明的图像,但到了这一步,教育意义就已经完成了,子弹直接 png ,闪电用激光代替,激光直接绘制直线就行了。至于闪电效果、导弹跟踪、智能选路、AI 、联机游戏等等,对于小朋友来说就完全超纲了。
    andyskaura
        17
    andyskaura  
       1 天前
    三段头尾能衔接上的图片,随机拼接。在闪电末端做形变。
    june4
        18
    june4  
    OP
       1 天前
    @laminux29 我就是想做个 Kingdom rush ,植物大战僵尸这类的 2d 小游戏,感觉还在中学生的能力范围内。
    像楼上专业人士说的直接上 unity 手搓闪电,这我都很难上手,而且知识点实在太多了。
    我把 kingdom rush 1 代那个游戏解包了,得到了上万张游戏素材,打算复制出个简易网页版,只是没从中发现长子弹的图,可能就是从小碎图拼起来的导致我没注意到。
    Rickkkkkkk
        19
    Rickkkkkkk  
       1 天前
    这问题可太适合问 ai 了。
    WoodsGao
        20
    WoodsGao  
       8 小时 34 分钟前
    trail renderer 了解下
    UnluckyNinja
        21
    UnluckyNinja  
       3 小时 34 分钟前
    楼主想复杂了,我去搜了 kingdom rush 的视频,特斯拉塔的闪电压根就没考虑过变形的问题,就是单个素材重复使用,https://www.bilibili.com/video/BV1g14y1t7CK?t=1807.8 30:08 这里,右上角那个怪丝血被最近处电塔打时,闪电都缩到看不见了,相比正常情况变形很明显吧,但是 0 人在意,楼主练手作品更不需要在意这些细节
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:35 · PVG 20:35 · LAX 05:35 · JFK 08:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.