查看: 9165|回復: 1

[分享] 看看酷炫帅气的连击特效要怎么写

[複製鏈接]

14

主題

142

帖子

3216

金錢

暗殺軍王.史雷佛

Rank: 8Rank: 8

威望
0
精華
0
貢獻
0
鑽石
0
閱讀權限
45
積分
3358
在線時間
29 小時
相冊
0
日誌
0
好友
3
QQ
發表於 2024-4-6 04:29 | 顯示全部樓層 |閱讀模式
本帖最後由 Lin-JN 於 2024-4-6 04:33 編輯

偶然想起当初玩魔兽世界,9.0版本的法师套装,有个特效是从天上召唤一大堆冰霜流星连续疯狂砸向敌人,便想着也写一个类似的东西,但写完总感觉不那么完美,只砸一个位置怎么行呢?
于是就有了这版的内容。
如果你喜欢同一个位置砸的话,只定一个坐标就可以了,特效设定成762流星或者究极之类看起来比较酷的,从天而降的特效视觉效果最佳。

首先,定义触发该特效条件。

比如触发一个武器特效,或者单独设定一个魔法技能,又或者是一个套装特效,你喜欢怎么定都可以。


  1.     if (xxxx) { // 定义触发的条件
  2.         // 一定要用线程池调用 否则后果很严重!
  3.         SkillEffect effect = new SkillEffect(pc, target);
  4.         ThreadPool.get().execute(effect); // 通过线程池调用 Runnalbe
  5.     }
複製代碼


  1.     // 魔法特效连击 by 圣子默默
  2.     private class SkillEffect implements Runnable {
  3.         private final L1PcInstance _pc;
  4.         private final L1Character _target;
  5.         private final int _gixid;
  6.         private final int _count;

  7.         private SkillEffect(L1PcInstance pc, L1Character target, int gfxid, int count) {
  8.             _pc = pc;
  9.             _target = target;
  10.             _gfxid = gfxid;
  11.             _count = count;
  12.         }

  13.         public void run() {
  14.             try {
  15.                 final int x = _target.getX();
  16.                 final int y = _target.getY();
  17.                 final short mapId = _target.getMapId();

  18.                 // 因为天堂的坐标显示位置,十字方向和X方向视觉差异1格磁贴,所以上下左右的数值最好比X向范围-1
  19.                 int[] locX = {x, x - 3, x, x + 3, x + 2, x - 2, x - 2, x + 2};
  20.                 int[] locY = {y + 3, y, y - 3, y, y + 2, y + 2, y - 2, y - 2};
  21.                 int dir = Math.min(8, _count); // 最多8个 如果更多 要么增加坐标点 要么增加变量来控制循环

  22.                 for (int i = 0; i < dir; i++) { // 0-7 一共8个点
  23.                     L1Location location = new L1Location(locX[i], locY[i], mapId);

  24.                     S_EffectLocation effect = new S_EffectLocation(location, _gfxid);
  25.                     _pc.sendPacketsWeaponSkillYN(effect);

  26.                     samePointDamage(_pc, _target, location); // 对该坐标位置或x格范围内的目标造成的伤害计算 这个请自己写,很容易的,所有版本的武器魔法中都有对应源码

  27.                     TimeUnit.MILLISECONDS.sleep(300); // 每砸一次间隔时间 sleep(X) 就是必须用线程池调用的原因 否则在扔完特效之前你的角色会无法做其他动作
  28.                 }

  29.             } catch (Exception e) {
  30.                 _log.error(e.getLocalizedMessage(), e);
  31.             }
  32.         }
  33.     }
複製代碼


以上,你可以通过想像力,让特效砸向任何一个地方,又或者将砸的次数、位置设定为随机增加趣味性,又或者获取角色特定范围内所有目标的坐标点疯砸,一次扔10个流星和分10次砸10颗流星的感觉完全不同!

以上这段代码,如果你不知道是什么样的,就把 _gfxid = 762,然后它的效果就跟旧火龙扔流星一样,区别在于火龙扔的是5颗,这里是8颗,你也可以找到巴拉卡斯5流星的坐标差值,for 循环中设定5个坐标,就跟巴拉卡斯的5流星一模一样了。

如果将坐标定为一个点,所有特效全部砸在同一位置,那么就跟上面说到的,魔兽世界9.0法师套装特效一样了,但是同坐标的话,for循环的语法要稍稍小改一下,坐标直接定为 _target.getLocation()。

注意,请尽量不要使用S_SkillSound封包,不好,不好,真的不好!

转载、svn团队请注明作者,感谢!

另外,诅咒所有拿别人分享的东西出去卖钱的渣渣们生孩子没屁眼,出门被车撞死。




上一篇︰每日經典 搖一搖
下一篇︰請問有大大可以分享3.81的右下角介面嗎?
http://starway.freebbs.tw/index.php

35

主題

165

帖子

2070

金錢

妖魔鬥士

Rank: 6Rank: 6

威望
0
精華
0
貢獻
0
鑽石
0
閱讀權限
40
積分
2235
在線時間
36 小時
相冊
0
日誌
0
好友
1
發表於 2024-4-17 12:25 | 顯示全部樓層
感谢分享,这个可以大大增加趣味性

[發帖際遇]: 一個袋子砸在了 xinjiemail11 頭上,xinjiemail11 賺了 2 金錢. 幸運榜 / 衰神榜
回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊會員

本版積分規則

天堂私服列表

45客服

Archiver| 45天堂私服論壇   分享到微博! 分享到臉書! 分享到噗浪! 分享到維特! 分享到Google+! 分享到LINE!

45天堂私服發佈站 ©    天堂私服架設教學  提供最新天堂私服最新資訊

流量最高、品質最好、服務最優、玩家首選、最新天堂私服資訊,都在45天堂私服發佈站.    免責聲明

Sitetag
line客服聯繫
掃一掃二碼
Line客服聯繫
24H專人回覆
返回頂部 返回列表