2D 游戏中的长子弹(比如闪电)是怎么绘制的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Game Engines
Unreal Engine
MyCryENGINE
june4
V2EX    游戏开发

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

  •  
  •   june4 94 天前 4577 次点击
    这是一个创建于 94 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    如果你想美观一点,人物形象可以用 png 背景透明的图像,但到了这一步,教育意义就已经完成了,子弹直接 png ,闪电用激光代替,激光直接绘制直线就行了。至于闪电效果、导弹跟踪、智能选路、AI 、联机游戏等等,对于小朋友来说就完全超纲了。
    andyskaura
        17
    andyskaura  
       94 天前
    三段头尾能衔接上的图片,随机拼接。在闪电末端做形变。
    june4
        18
    june4  
    OP
       94 天前
    @laminux29 我就是想做个 Kingdom rush ,植物大战僵尸这类的 2d 小游戏,感觉还在中学生的能力范围内。
    像楼上专业人士说的直接上 unity 手搓闪电,这我都很难上手,而且知识点实在太多了。
    我把 kingdom rush 1 代那个游戏解包了,得到了上万张游戏素材,打算复制出个简易网页版,只是没从中发现长子弹的图,可能就是从小碎图拼起来的导致我没注意到。
    Rickkkkkkk
        19
    Rickkkkkkk  
       94 天前
    这问题可太适合问 ai 了。
    WoodsGao
        20
    WoodsGao  
       93 天前
    trail renderer 了解下
    UnluckyNinja
        21
    UnluckyNinja  
       93 天前
    楼主想复杂了,我去搜了 kingdom rush 的视频,特斯拉塔的闪电压根就没考虑过变形的问题,就是单个素材重复使用,https://www.bilibili.com/video/BV1g14y1t7CK?t=1807.8 30:08 这里,右上角那个怪丝血被最近处电塔打时,闪电都缩到看不见了,相比正常情况变形很明显吧,但是 0 人在意,楼主练手作品更不需要在意这些细节
    june4
        22
    june4  
    OP
       93 天前
    @UnluckyNinja 嗯。不过我发现象楼上二位说的,用算法自绘闪电或别的长子弹也很容易。ai 就能出个大至的自己改改就能用。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2825 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 13:35 PVG 21:35 LAX 06:35 JFK 09:35
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86