找回密码
 点一下
查看: 852|回复: 2

数学问题-如何让环绕马甲一直背对英雄呢

[复制链接]
发表于 2011-11-21 23:41:14 | 显示全部楼层 |阅读模式
问一个数学问题.
我写了一个单位环绕.
让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]
发表于 2011-11-22 00:01:18 | 显示全部楼层
表示~直接设置马甲面向为英雄位置到马甲位置的方向不就可以了嘛?~

Atan2(y马甲-y英雄, x马甲-x英雄)*bj_RADTODEG
回复

使用道具 举报

发表于 2011-11-22 19:47:21 | 显示全部楼层
同意楼上  就是2点角度的问题吧
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 11:34 , Processed in 0.031961 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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