天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟

标题: JASS: 本地玩家详解 [打印本页]

作者: prmosquito    时间: 2020-4-20 22:09
标题: JASS: 本地玩家详解
本帖最后由 prmosquito 于 2020-4-23 14:03 编辑

JASS: GetLocalPlayer()函数详解

By:https://gamesdeity.com


教程原作者: PurgeandFire

原创翻译,请勿转载。


翻译和修订:JoyWoon

该文章对[本地玩家]或是[GetLocalPlayer]依旧有疑惑的朋友十分有帮助。

阅读前请先了解什么是handle,什么不是handle。

handle是游戏内一切实例的句柄,而handle也有handle索引,可以通过GetHandleId函数获取。

String字符串、Integer整数型、Real实数型,据我所知都不是handle。因此在使用本地玩家和GetLocalPlayer时,请一定注意是否对handle进行了操作。

以下都是handle类型(包括代理agent,因为agent继承了handle)的数据(引自:common.j)。

  
type agent extends handle
  
type event extends agent //触发器事件
  
type player extends agent //玩家
  
type widget extends agent //游戏对象
  
type unit extends widget //单位
  
type destructable extends widget //可破坏物
  
type item extends widget //物品
  
type ability extends agent //技能实例
  
type buff extends ability //buff实例
  
type force extends agent //玩家组
  
type group extends agent //单位组
  
type trigger extends agent //触发器
  
type triggercondition extends agent //触发器判断
  
type triggeraction extends handle //触发器动作
  
type timer extends agent //计时器
  
type location extends agent //以下不一一标识了……
  
type region extends agent
  
type rect extends agent
  
type boolexpr extends agent
  
type sound extends agent
  
type conditionfunc extends boolexpr
  
type filterfunc extends boolexpr
  
type unitpool extends handle
  
type itempool extends handle
  
type race extends handle
  
type alliancetype extends handle
  
type racepreference extends handle
  
type gamestate extends handle
  
type igamestate extends gamestate
  
type fgamestate extends gamestate
  
type playerstate extends handle
  
type playerscore extends handle
  
type playergameresult extends handle
  
type unitstate extends handle
  
type aidifficulty extends handle
  
type eventid extends handle
  
type gameevent extends eventid
  
type playerevent extends eventid
  
type playerunitevent extends eventid
  
type unitevent extends eventid
  
type limitop extends eventid
  
type widgetevent extends eventid
  
type dialogevent extends eventid
  
type unittype extends handle
  
type gamespeed extends handle
  
type gamedifficulty extends handle
  
type gametype extends handle
  
type mapflag extends handle
  
type mapvisibility extends handle
  
type mapsetting extends handle
  
type mapdensity extends handle
  
type mapcontrol extends handle
  
type playerslotstate extends handle
  
type volumegroup extends handle
  
type camerafield extends handle
  
type camerasetup extends handle
  
type playercolor extends handle
  
type placement extends handle
  
type startlocprio extends handle
  
type raritycontrol extends handle
  
type blendmode extends handle
  
type texmapflags extends handle
  
type effect extends agent
  
type effecttype extends handle
  
type weathereffect extends handle
  
type terraindeformation extends handle
  
type fogstate extends handle
  
type fogmodifier extends agent
  
type dialog extends agent
  
type button extends agent
  
type quest extends agent
  
type questitem extends agent
  
type defeatcondition extends agent
  
type timerdialog extends agent
  
type leaderboard extends agent
  
type multiboard extends agent
  
type multiboarditem extends agent
  
type trackable extends agent
  
type gamecache extends agent
  
type version extends handle
  
type itemtype extends handle
  
type texttag extends handle
  
type attacktype extends handle
  
type damagetype extends handle
  
type weapontype extends handle
  
type soundtype extends handle
  
type lightning extends handle
  
type pathingtype extends handle
  
type mousebuttontype extends handle//war3 1.29
  
type animtype extends handle//war3 1.30 PTR
  
type subanimtype extends handle//war3 1.30 PTR
  
type image extends handle
  
type ubersplat extends handle
  
type hashtable extends agent
  
type framehandle extends handle//war3PTR1.31.0.11889
  
type originframetype extends handle//war3PTR1.31.0.11889
  
type framepointtype extends handle//war3PTR1.31.0.11889
  
type textaligntype extends handle//war3PTR1.31.0.11889
  
type frameeventtype extends handle//war3PTR1.31.0.11889
  
type oskeytype extends handle//war3PTR1.31.0.11889
  
type abilityintegerfield extends handle//war3PTR1.31.0.11889
  
type abilityrealfield extends handle//war3PTR1.31.0.11889
  
type abilitybooleanfield extends handle//war3PTR1.31.0.11889
  
type abilitystringfield extends handle//war3PTR1.31.0.11889
  
type abilityintegerlevelfield extends handle//war3PTR1.31.0.11889
  
type abilityreallevelfield extends handle//war3PTR1.31.0.11889
  
type abilitybooleanlevelfield extends handle//war3PTR1.31.0.11889
  
type abilitystringlevelfield extends handle//war3PTR1.31.0.11889
  
type abilityintegerlevelarrayfield extends handle//war3PTR1.31.0.11889
  
type abilityreallevelarrayfield extends handle//war3PTR1.31.0.11889
  
type abilitybooleanlevelarrayfield extends handle//war3PTR1.31.0.11889
  
type abilitystringlevelarrayfield extends handle//war3PTR1.31.0.11889
  
type unitintegerfield extends handle//war3PTR1.31.0.11889
  
type unitrealfield extends handle//war3PTR1.31.0.11889
  
type unitbooleanfield extends handle//war3PTR1.31.0.11889
  
type unitstringfield extends handle//war3PTR1.31.0.11889
  
type unitweaponintegerfield extends handle//war3PTR1.31.0.11889
  
type unitweaponrealfield extends handle//war3PTR1.31.0.11889
  
type unitweaponbooleanfield extends handle//war3PTR1.31.0.11889
  
type unitweaponstringfield extends handle//war3PTR1.31.0.11889
  
type itemintegerfield extends handle//war3PTR1.31.0.11889
  
type itemrealfield extends handle//war3PTR1.31.0.11889
  
type itembooleanfield extends handle//war3PTR1.31.0.11889
  
type itemstringfield extends handle//war3PTR1.31.0.11889
  
type movetype extends handle//war3PTR1.31.0.11889
  
type targetflag extends handle//war3PTR1.31.0.11889
  
type armortype extends handle//war3PTR1.31.0.11889
  
type heroattribute extends handle//war3PTR1.31.0.11889
  
type defensetype extends handle//war3PTR1.31.0.11889
  
type regentype extends handle//war3PTR1.31.0.11889
  
type unitcategory extends handle//war3PTR1.31.0.11889
  
type pathingflag extends handle//war3PTR1.31.0.11889
  

什么是GetLocalPlayer()?
  
constant native GetLocalPlayer takes nothing returns player
  
GetLocalPlayer是最有用的本地API函数之一,但它也是最容易出问题的。

GetLocalPlayer用于索引本地玩家,引用GetLocalPlayer的代码都将进行异步操作。因此,如果操作得当,您仅仅只能对一个玩家进行异步操作,而对其他玩家而言并不会同步这个操作。

GetLocalPlayer 和 异步
我们常称GetLocalPlayer函数为“异步函数”。 这意味着它容易引起玩家之间的数据不同步。数据的不同步会产生错误,并导致在玩多人游戏时会使某些玩家断开连接。 在本教程中,我将向您详细的解释如何正确的使用GetLocalPlayer(),而不会出现玩家断线问题。

JASS中如何引用玩家?
在JASS中,玩家索引的范围是0-11,而不是1-12。
(0 = 1, 1 = 2, 2 = 3 ... 10 = 11, 11 = 12)

如下:
  
if GetLocalPlayer() == Player(7) then
  
// Player(7) 引用的是Player 8(粉红色)
  
endif
  

其他常见的使用方法是:
1.   GetTriggerPlayer()
2.   GetOwningPlayer(GetTriggerUnit())
第1个是当前触发器事件触发的玩家,第2个是当前触发器事件触发的单位的所有者。您可以使用各种引用玩家的方式,不过以上是最常见的方式。

GetLocalPlayer基本用法
**** 本内容需购买 ****


作者: Morgan琨    时间: 2020-4-21 20:20
楼主发贴辛苦了,谢谢楼主分享!我觉得天工社区是注册对了!
作者: 创世神    时间: 2020-4-22 01:06

这东西我收了!谢谢楼主!天工社区真好!
作者: CNWorth    时间: 2020-4-23 10:21

我看不错噢 谢谢楼主!天工社区越来越好!
作者: 来看看    时间: 2020-4-23 12:01

这个帖子不回对不起自己!我想我是一天也不能离开天工社区。
作者: Secret放肆    时间: 2020-4-23 21:31

楼主太厉害了!楼主,I*老*虎*U!我觉得天工社区真是个好地方!
作者: liandey    时间: 2020-4-24 21:12
楼主发贴辛苦了,谢谢楼主分享!我觉得天工社区是注册对了!
作者: 初阳美少女    时间: 2020-4-26 20:39

我看不错噢 谢谢楼主!天工社区越来越好!
作者: 无邪蝶恋    时间: 2020-4-28 15:24
楼主发贴辛苦了,谢谢楼主分享!我觉得天工社区是注册对了!
作者: 沃之文化    时间: 2020-5-1 15:14

感谢楼主的无私分享!要想天工社区好 就靠你我他
作者: 子不语    时间: 2020-5-4 08:26

既然你诚信诚意的推荐了,那我就勉为其难的看看吧!天工社区不走平凡路。
作者: Kaiju    时间: 2020-5-6 02:27

这个帖子不回对不起自己!我想我是一天也不能离开天工社区。
作者: 无邪蝶恋    时间: 2020-5-6 09:32
楼主发贴辛苦了,谢谢楼主分享!我觉得天工社区是注册对了!




欢迎光临 天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟 (http://bbs.mvprpg.com/) Powered by Discuz! X3.4