|
问一个数学问题.
我写了一个单位环绕.
让4个单位环绕英雄.
但是出了个问题.就是我希望单位的面向角度一直是背对英雄.
也就是说,如果把单位的模型是一把剑的话,
那么一直都是剑柄对着英雄.剑刃对着外部.
我就设置每 0.05秒.移动一次单位,移动的角度是+10度. 距离不变.
并设置单位的面向角度+10.
这样刚开始的几圈.马甲的朝向还是对的.但是没过几圈.就不开始歪了..
表示我想了很久,发现想不通.所以来此求调教.
如何让环绕马甲一直背对英雄呢.
设置面向角度的代码在函数Act2里面...而目前这个面向角度的设置已经是被我改了又改了,已经还是我上面写的那样计算了..但是,就是不知道该怎么算呢?
请指教.
以下是代码
[jass]
//! zinc
library xxx
{
constant integer ABILITY='AHds'; //触发技能
constant real GAP=0.05; //移动时间间隔.
constant real DIS=300; //单位与马甲的距离
constant real TIMED=10; //持续时间
constant real GAP_DIS=10; //每次移动的角度
constant integer DUMMY='h005';//马甲ID
timer td;
unit hero,d[],u;
real da[],dx[],dy[],x,y,rrr;
function Act3()
{integer i;
DestroyTimer(GetExpiredTimer());
DestroyTimer(td);
for(i=1;i<5;i+=1)
{RemoveUnit(d);
}
}
function Act2()
{real l,ax,ay;
integer i;
rrr+=1;
for(i=1;i<5;i+=1)
{
//得到当前英雄单位的X,Y坐标.
x=GetUnitX(u);y=GetUnitY(u);
da+=GAP_DIS;//增加角度
dx=x+DIS*Cos(da*0.017);//计算移动后的马甲的X坐标
dy=y+DIS*Sin(da*0.017);//计算移动后的马甲的Y坐标
SetUnitX(d,dx);
SetUnitY(d,dy);
//以上为设置坐标
//实验失败
//点B到点A的方向就是 反正切 (Atan2(A的Y坐标 - B的Y坐标)*(A的X坐标 - B的X坐标))
//l=Atan2((y-dy),(x-dx));
//l=l+10*I2R(i);
l=GetUnitFacing(d)-GAP_DIS;
BJDebugMsg(R2S(l));
SetUnitFacing(d,l);//更改单位面向角度
IssueImmediateOrder(d,"THUNDERCLAP");//施放技能
ax=dx+100*Cos(l*0.017);
ay=dy+100*Sin(l*0.017);
IssuePointOrder(d,"CARRIONSWARM",ax,ay);
}
}
function Act()
{
integer i;
timer t=CreateTimer();rrr=1;
//创建计时器(全局)
td=CreateTimer();
//需要坐标
u=GetTriggerUnit();
x=GetUnitX(u);y=GetUnitY(u);
//创建单位 4个
for(i=1;i<5;i+=1)
{
//计算每个单位需要的坐标.
da=90*I2R(i);//单位的面向角度
dx=x+DIS*Cos(da*0.017);//马甲的X坐标
dy=y+DIS*Sin(da*0.017);//马甲的Y坐标
d=CreateUnit(GetOwningPlayer(u),DUMMY,dx,dy,da);//创建单位.
}
//启动计时器
TimerStart(td,GAP,true,function Act2);
//准备干掉全局计时器
TimerStart(t,TIMED,false,function Act3);
t=null;
}
function Con()->boolean
{return GetSpellAbilityId()==ABILITY && IsUnitType(GetTriggerUnit(),UNIT_TYPE_HERO );
}
function onInit()
{trigger t = CreateTrigger();
TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT);
TriggerAddCondition(t,function Con);
TriggerAddAction(t,function Act);
t=null;
}
}
//! endzinc
[/jass] |
|