找回密码
 点一下
查看: 926|回复: 9

如何获取触发玩家当前镜头的XY坐标

[复制链接]
发表于 2014-2-14 17:53:10 | 显示全部楼层 |阅读模式
本帖最后由 huashao1000 于 2014-2-16 18:28 编辑

然后在这个坐标创建一次 特效和伤害  并让所有玩家都看到
发表于 2014-2-14 22:38:09 | 显示全部楼层
如果本地玩家等于触发玩家,那么直接获取镜头XY,并将数据同步给其他玩家
如果本地玩家不等于触发玩家,等待数据同步,然后获取数据

至于数据同步,请搜索游戏缓存、数据同步什么的
比如:
http://bbs.islga.org/forum.php?mod=viewthread&tid=1110031
看希瓦的回答吧,我的回答无视掉好了……

点评

我搜索到了 可是我不懂JASS 能用触发告诉我一下 是什么意思吗  详情 回复 发表于 2014-2-14 22:44
回复

使用道具 举报

 楼主| 发表于 2014-2-14 22:44:22 | 显示全部楼层
chyj4747 发表于 2014-2-14 22:38
如果本地玩家等于触发玩家,那么直接获取镜头XY,并将数据同步给其他玩家
如果本地玩家不等于触发玩家,等 ...

我搜索到了 可是我不懂JASS  能用触发告诉我一下 是什么意思吗
回复

使用道具 举报

发表于 2014-2-14 23:27:35 | 显示全部楼层
在触发单位镜头中心创建点,选取所有玩家移动镜头到点的位置,播放特效,删除特效,删除点。

点评

就是捕捉不到触发单位镜头中心的点。。或者坐标。。  详情 回复 发表于 2014-2-14 23:31
回复

使用道具 举报

 楼主| 发表于 2014-2-14 23:31:27 | 显示全部楼层
hikari 发表于 2014-2-14 23:27
在触发单位镜头中心创建点,选取所有玩家移动镜头到点的位置,播放特效,删除特效,删除点。

就是捕捉不到触发单位镜头中心的点。。或者坐标。。
回复

使用道具 举报

发表于 2014-2-14 23:37:43 | 显示全部楼层
当前镜头点是本地函数,必须通过缓冲同步。

因为要使用缓冲同步,所以必须用Jass,所以不能用触发告诉你是什么意思

你可以看一下希瓦在那帖子里说的

点评

那可以告诉我每个语句都是什么意思吗  详情 回复 发表于 2014-2-14 23:55
回复

使用道具 举报

 楼主| 发表于 2014-2-14 23:55:01 | 显示全部楼层
天江衣 发表于 2014-2-14 23:37
当前镜头点是本地函数,必须通过缓冲同步。

因为要使用缓冲同步,所以必须用Jass,所以不能用触发告诉你 ...

那可以告诉我每个语句都是什么意思吗
回复

使用道具 举报

发表于 2014-2-15 10:44:55 | 显示全部楼层
缓存同步的延迟可是不小的...

一定要在镜头位置创建特效嘛? 或许有点自找麻烦呐~
回复

使用道具 举报

 楼主| 发表于 2014-2-16 18:27:35 | 显示全部楼层
好吧 我直接复制了 希瓦的触发。。。。
回复

使用道具 举报

发表于 2014-2-16 21:45:33 | 显示全部楼层
本帖最后由 天江衣 于 2014-2-16 21:49 编辑

  1. globals
  2.     gamecache udg_sync_gc
  3. endglobals

  4. //同步函数SyncReal,用于在缓存中同步一个实数
  5. function SyncReal takes gamecache gc, string mk, string k, real r returns nothing
  6.     local real t
  7.     set t = GetStoredReal(gc, mk, k)//先获取同步之前的值,在同步开始后还原,避免出现数据异步而掉线
  8.     call StoreReal(gc, mk, k, r)
  9.     call SyncStoredReal(gc, mk, k)
  10.     call StoreReal(gc, mk, k, t)
  11. endfunction

  12. //等待函数WaitForReal,直到缓冲中的某个实数等于r时返回
  13. function WaitForReal takes gamecache gc, string mk, string k, real r returns nothing
  14.     loop
  15.         exitwhen(GetStoredReal(gc, mk, k) == r)
  16.         call TriggerSleepAction(0.00)   
  17.     endloop
  18. endfunction

  19. //创建用于同步的缓冲,需要在地图初始化时调用一次
  20. function Sync_InitGC takes nothing returns nothing
  21.     if(udg_sync_gc == null)then
  22.         call FlushGameCache(InitGameCache("Sync"))
  23.         set udg_sync_gc = InitGameCache("Sync")
  24.     endif
  25. endfunction

  26. //获得以玩家P为标准的同步点
  27. function Sync_GetLocation takes player p, real x, real y returns location
  28.     local string mk = I2S(GetPlayerId(p))
  29.     call WaitForReal(udg_sync_gc, mk, "state", 0.00)//等待直到state==0,表示可以开始同步
  30.     call StoreReal(udg_sync_gc, mk, "state", 1.00)//设置state=1,表示同步开始
  31.     if(GetLocalPlayer() == p)then//以玩家p为标准执行同步
  32.         call SyncReal(udg_sync_gc, mk, "x", x)
  33.         call SyncReal(udg_sync_gc, mk, "y", y)
  34.         call SyncReal(udg_sync_gc, mk, "state", 2.00)//同步state=2,表示同步结束        
  35.     endif
  36.     call WaitForReal(udg_sync_gc, mk, "state", 2.00)//等待同步结束
  37.     call StoreReal(udg_sync_gc, mk, "state", 0.00)//标志可以开始下一次同步
  38.     set x = GetStoredReal(udg_sync_gc, mk, "x")
  39.     set y = GetStoredReal(udg_sync_gc, mk, "y")
  40.     return Location(x, y)
  41. endfunction

  42. //获得玩家p的当前镜头点
  43. function Sync_CameraTarget takes player p returns location
  44.     return Sync_GetLocation(p, GetCameraTargetPositionX(), GetCameraTargetPositionY())
  45. endfunction
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-4 04:44 , Processed in 0.374692 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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