查看: 101|回复: 0

[转载发布] 增加自动图块

[复制链接]
  • TA的每日心情
    开心
    昨天 10:15
  • 签到天数: 73 天

    连续签到: 1 天

    [LV.6]常住居民II

    2044

    主题

    86

    回帖

    8602

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    -2
    卡币
    6460
    OK点
    16
    积分
    8602
    发表于 2024-8-22 12:02:54 | 显示全部楼层 |阅读模式
    有没有觉得XP的自动图块只能7个, 太不够用了? ,  这个脚本就是增加自动图块数量, 降低绘制地图工作量的, 不过, 只能用于静态自动图块, 想要动态效果还是只能到那7个里面扣

    使用方法, 把脚本塞到 main之前,  然后打开你的Titles文件夹, 把要增加自动图块的图片拿出来, 在它下面补上48个展开的自动图块, 然后把图片名字后面加上  @自动图块所在行数# (行数从1开始数),之后到数据库里替换上它就可以了

    自动图块添加保证48个图块连一起即可, 可以添加复数自动图块, 不同的自动图块之间不需要连在一起(即两个展开的自动图块之间可以随意插入普通图块), 只要在名字标注好准确的起始行即可

    像这样


    然后到地图里, 从新加的图块里随便选一个当画笔, 画到地图上


    虽然编辑器里是乱七八糟的图块, 但是实际运行时这些图块就会按自动图块的方式拼好了


    j鉴于想把自动图块展开成48块, 手动操作稍微有小点麻烦, 顺便提供一个小工具
    [attachments]0[/attachments]

    文件解压后,把要合并的图块文件和自动图块文件塞到该文件夹内, 然后点击这个橘子图标运行下, 就可以直接拿去用了

    像这样


    此外事后想继续添加新的自动图块时, 可以把已经合成过的图块再塞进去合成新的自动图块

    -------------------------------------------------------------------------------------------------------------------
    别忘了在工程里插入这个脚本
    RUBY 代码
    1. #===========================================================================
    2. # ● 自动图块扩展 V1.0   by 灯笼菜刀王
    3. #
    4. # 使用方法: 把自动图块手动展开后拼到原图块上
    5. #           并将图块图片名称后面加上 @自动图块行所在的行数# (行数从1开始)
    6. #           可以添加复数自动图块,在名称后加上每个自动图块所行数即可
    7. #
    8. #     例子: 001-Grassland01@19#25#31#
    9. #===========================================================================
    10. class Game_Map
    11.   alias old_setup setup
    12.   def setup(map_id) ; old_setup(map_id) ;map_auto_set ; end
    13.   def auto?(au,id) ;return au.find{|i| (a=(id - i)) > -1and a < 48} ;end
    14.   def same?(od,id) ;return ((a=(id - od)) > -1and a < 48) ? 1 : 0 ;end
    15.   def map_auto_set
    16.     returnunless@tileset_name =~ /@(\d+)#/
    17.     a = @tileset_name.split(/@/)[-1]  ;f = self.data
    18.     au = a.split(/#/).map{|i| (i.to_i - 1) * 8 + 384}
    19.     for pag in[0,1,2]
    20.       for x in0...f.xsize
    21.         for y in0...f.ysize
    22.           nextif(od = auto?(au,f[x,y,pag])).nil?
    23.           b = same?(od,f[x,y+1,pag]) * 8 + same?(od,f[x+1,y,pag]) * 4 +\
    24.              same?(od,f[x,y-1,pag]) * 2 + same?(od,f[x-1,y,pag])
    25.           c = same?(od,f[x-1,y+1,pag]) * 8 + same?(od,f[x+1,y+1,pag]) * 4 +\
    26.              same?(od,f[x+1,y-1,pag]) * 2 + same?(od,f[x-1,y-1,pag])
    27.           f[x,y,pag] = get_autotile(b,c) + od
    28.         end
    29.       end
    30.     end
    31.   end
    32.   def get_autotile(b, c)# By guoxiaomi (P1)
    33.     case b ; when 0b1111 ; 15 - c
    34.     when 0b1110 ; 19 - (c / 2) % 4
    35.     when 0b1101 ; 23 - (c / 4) % 4
    36.     when 0b1011 ; 27 - c / 8 - (c * 2) % 4
    37.     when 0b0111 ; 31 - c % 4
    38.     when 0b1010 ; 32
    39.     when 0b0101 ; 33
    40.     when 0b1100 ; 35 - (c / 4) % 2
    41.     when 0b1001 ; 37 - c / 8
    42.     when 0b0011 ; 39 - c % 2
    43.     when 0b0110 ; 41 - (c / 2) % 2
    44.     when 0b1000 then42
    45.     when 0b0100 then43
    46.     when 0b0010 then44
    47.     when 0b0001 then45
    48.     when 0b0000 then46
    49.     end
    50.   end
    51. end
    复制代码


                本帖来自P1论坛作者灯笼菜刀王,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=496853  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-9-21 11:02 , Processed in 0.052642 second(s), 37 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表