|
楼主 |
发表于 2011-1-11 01:41:07
|
显示全部楼层
[jass]
function BulletMove takes nothing returns nothing
local unit u
local real X
local real Y
local real ux = GetUnitX(udg_Player)
local real uy = GetUnitY(udg_Player)
local real z = ux*ux+uy*uy
local integer i = 0
set ux = 2 * ux
set uy = 2 * uy
loop
exitwhen i >= udg_Bullet_IndexMax
set X = udg_Bullet_X+udg_Bullet_DX
set Y = udg_Bullet_Y+udg_Bullet_DY
if (udg_GameMinX <= X) and (X <= udg_GameMaxX) and (udg_GameMinY <= Y) and (Y <= udg_GameMaxY) then
if udg_Bullet_Range2>X*(X-ux)+Y*(Y-uy)+z then
// 弹幕命中
call KillUnit(udg_Bullet_Unit)
set udg_Bullet_IndexMax = udg_Bullet_IndexMax - 1
set udg_Bullet_Unit = udg_Bullet_Unit [udg_Bullet_IndexMax]
set udg_Bullet_X = udg_Bullet_X [udg_Bullet_IndexMax]
set udg_Bullet_Y = udg_Bullet_Y [udg_Bullet_IndexMax]
set udg_Bullet_DX = udg_Bullet_DX [udg_Bullet_IndexMax]
set udg_Bullet_DY = udg_Bullet_DY [udg_Bullet_IndexMax]
set udg_Bullet_Range2 = udg_Bullet_Range2[udg_Bullet_IndexMax]
else
set u = udg_Bullet_Unit
set udg_Bullet_X = X
set udg_Bullet_Y = Y
call SetUnitX(u, X)
call SetUnitY(u, Y)
set i = i + 1
endif
else
// 弹幕越界
call KillUnit(udg_Bullet_Unit)
set udg_Bullet_IndexMax = udg_Bullet_IndexMax - 1
set udg_Bullet_Unit = udg_Bullet_Unit [udg_Bullet_IndexMax]
set udg_Bullet_X = udg_Bullet_X [udg_Bullet_IndexMax]
set udg_Bullet_Y = udg_Bullet_Y [udg_Bullet_IndexMax]
set udg_Bullet_DX = udg_Bullet_DX [udg_Bullet_IndexMax]
set udg_Bullet_DY = udg_Bullet_DY [udg_Bullet_IndexMax]
set udg_Bullet_Range2 = udg_Bullet_Range2[udg_Bullet_IndexMax]
endif
endloop
set u = null
endfunction
// X、Y 弹幕的初始位置
// Face 弹幕的面向角度
// Speed 弹幕的速度
// Range 弹幕的碰撞半径
function CreateBullet takes unit Bullet, real X, real Y, real Face, real Speed, real Range returns unit
call DisplayTimedTextToPlayer(Player(0),0,0,2,"最高位:"+I2S(udg_Bullet_IndexMax))
set udg_Bullet_Unit [udg_Bullet_IndexMax] = Bullet
set udg_Bullet_X [udg_Bullet_IndexMax] = X
set udg_Bullet_Y [udg_Bullet_IndexMax] = Y
set udg_Bullet_DX [udg_Bullet_IndexMax] = Cos(Face*0.01745)*Speed
set udg_Bullet_DY [udg_Bullet_IndexMax] = Sin(Face*0.01745)*Speed
set udg_Bullet_Range2[udg_Bullet_IndexMax] = Range*Range
set udg_Bullet_IndexMax = udg_Bullet_IndexMax + 1
return Bullet
endfunction
function CreateBulletEx takes player p, integer id, real X, real Y, real Face, real Speed, real Range returns unit
if (udg_GameMinX <= X) and (X <= udg_GameMaxX) and (udg_GameMinY <= Y) and (Y <= udg_GameMaxY) then
return CreateBullet(CreateUnit(p, id, X, Y, Face), X, Y, Face, Speed, Range)
endif
return null
endfunction
function BulletInitialization takes nothing returns nothing
set udg_Bullet_IndexMax = 0
call TimerStart(CreateTimer(), 0.05, true, function BulletMove)
endfunction
[/jass] |
|