【发布时间】:2010-07-18 16:07:11
【问题描述】:
// Arg0 - Map, Arg1 - X, Arg2 - Y, Arg3 - Distance, Arg4 - MaxDistance
var xx,yy,dist, x1, y1, dir, maxdist, obj, res, map;
map = argument0
x1 = argument1
y1 = argument2
dir = argument3
maxdist = argument4
dist = 0
do {
dist+=1
xx = x1+round(lengthdir_x(dist,dir))
yy = y1+round(lengthdir_y(dist,dir))
} until(block_isSolid(map_get_block(map,xx,yy)) or dist>maxdist)
if !block_isSolid(map_get_block(map,xx,yy)) {
return false
} else {
res = ds_list_create()
ds_list_add(res,xx)
ds_list_add(res,yy)
return res
}
有这个功能。 lengthdir_x/y 是 sin/cos(dir)*dist。
不要因为我把 C 标签放在那里而对我大喊大叫。这些语言非常相似,以至于我几乎可以直接复制。
好了,手续办好了: 当前的算法有时会沿对角线运行(其中 x 和 y 在任一符号中都变化一个),但我希望它不要这样做。
EG:
当前:(其中 X 是投射的光线)
通缉:
呸呸呸 oxxoo ooxxo oooxx 呜呜呜有意义吗?
请帮忙。
【问题讨论】:
标签: c algorithm rounding raytracing gml