看看酷炫帅气的连击特效要怎么写
本帖最後由 Lin-JN 於 2024-4-6 04:33 編輯偶然想起当初玩魔兽世界,9.0版本的法师套装,有个特效是从天上召唤一大堆冰霜流星连续疯狂砸向敌人,便想着也写一个类似的东西,但写完总感觉不那么完美,只砸一个位置怎么行呢?
于是就有了这版的内容。
如果你喜欢同一个位置砸的话,只定一个坐标就可以了,特效设定成762流星或者究极之类看起来比较酷的,从天而降的特效视觉效果最佳。
首先,定义触发该特效条件。
比如触发一个武器特效,或者单独设定一个魔法技能,又或者是一个套装特效,你喜欢怎么定都可以。
if (xxxx) { // 定义触发的条件
// 一定要用线程池调用 否则后果很严重!
SkillEffect effect = new SkillEffect(pc, target);
ThreadPool.get().execute(effect); // 通过线程池调用 Runnalbe
}
// 魔法特效连击 by 圣子默默
private class SkillEffect implements Runnable {
private final L1PcInstance _pc;
private final L1Character _target;
private final int _gixid;
private final int _count;
private SkillEffect(L1PcInstance pc, L1Character target, int gfxid, int count) {
_pc = pc;
_target = target;
_gfxid = gfxid;
_count = count;
}
public void run() {
try {
final int x = _target.getX();
final int y = _target.getY();
final short mapId = _target.getMapId();
// 因为天堂的坐标显示位置,十字方向和X方向视觉差异1格磁贴,所以上下左右的数值最好比X向范围-1
int[] locX = {x, x - 3, x, x + 3, x + 2, x - 2, x - 2, x + 2};
int[] locY = {y + 3, y, y - 3, y, y + 2, y + 2, y - 2, y - 2};
int dir = Math.min(8, _count); // 最多8个 如果更多 要么增加坐标点 要么增加变量来控制循环
for (int i = 0; i < dir; i++) { // 0-7 一共8个点
L1Location location = new L1Location(locX, locY, mapId);
S_EffectLocation effect = new S_EffectLocation(location, _gfxid);
_pc.sendPacketsWeaponSkillYN(effect);
samePointDamage(_pc, _target, location); // 对该坐标位置或x格范围内的目标造成的伤害计算 这个请自己写,很容易的,所有版本的武器魔法中都有对应源码
TimeUnit.MILLISECONDS.sleep(300); // 每砸一次间隔时间 sleep(X) 就是必须用线程池调用的原因 否则在扔完特效之前你的角色会无法做其他动作
}
} catch (Exception e) {
_log.error(e.getLocalizedMessage(), e);
}
}
}
以上,你可以通过想像力,让特效砸向任何一个地方,又或者将砸的次数、位置设定为随机增加趣味性,又或者获取角色特定范围内所有目标的坐标点疯砸,一次扔10个流星和分10次砸10颗流星的感觉完全不同!
以上这段代码,如果你不知道是什么样的,就把 _gfxid = 762,然后它的效果就跟旧火龙扔流星一样,区别在于火龙扔的是5颗,这里是8颗,你也可以找到巴拉卡斯5流星的坐标差值,for 循环中设定5个坐标,就跟巴拉卡斯的5流星一模一样了。
如果将坐标定为一个点,所有特效全部砸在同一位置,那么就跟上面说到的,魔兽世界9.0法师套装特效一样了,但是同坐标的话,for循环的语法要稍稍小改一下,坐标直接定为 _target.getLocation()。
注意,请尽量不要使用S_SkillSound封包,不好,不好,真的不好!
转载、svn团队请注明作者,感谢!
另外,诅咒所有拿别人分享的东西出去卖钱的渣渣们生孩子没屁眼,出门被车撞死。
頁:
[1]