Вот вопрос: внедрил я рисование окружности и прямой, но что-то не совсем работает:
def add_connect(initst,finst,anim=true)
#Рисует белую линию между звёздами
#initst - Номер звезды, от которой пойдёт линия
#finst - Номер звезды, к которой пойдёт линия
#anim - При true показывает анимацию, при false линия появляется сразу
ist=@stars[initst]
fst=@stars[finst]
@connects[initst.to_s+'_'+finst.to_s]=Sprite.new # Добавление спрайта в хеш и задание его настроек
cn=@connects[initst.to_s+'_'+finst.to_s]
cn.bitmap=Bitmap.new((ist.x-fst.x).abs,(ist.y-fst.y).abs) # Размеры битмапа, углами
# которого являются два спрайта
cn.x=[ist.x,fst.x].min # Координаты левого верхнего угла равны координатам спрайта
cn.y=[ist.y,fst.y].min
cn.z=300
ixd=ist.bitmap.width*ist.zoom_x/2 # Отступ от угла (поправка на размер звезды)
fxd=fst.bitmap.width*fst.zoom_x/2
iyd=ist.bitmap.height*ist.zoom_y/2
fyd=fst.bitmap.height*fst.zoom_y/2
wid=cn.bitmap.width-fxd-ixd
hei=cn.bitmap.height-fyd-iyd
initx= ist.x<fst.x ? (ist.x+ixd) : (ist.x-ixd) # Координаты начала и конца линии с поправкой
finx= ist.x<fst.x ? (fst.x-fxd) : (fst.x+fxd) # на размер звезды
inity= ist.y<fst.y ? (ist.y+iyd) : (ist.y-iyd)
finy= ist.y<fst.y ? (fst.y-fyd) : (fst.y+fyd)
bmp=@connects[initst.to_s+'_'+finst.to_s].bitmap
x0=initx # Координаты начальной точки для вычисления вектора
y0=inity
x=x0
y=y0
ax=finx-initx # Координаты вектора
ay=finy-inity
k=0
white=Color.new(255,255,255,255)
half=Color.new(192,192,192,96)
# p 'ixd'+ixd.to_s,'fxd'+fxd.to_s,'wid'+wid.to_s,'hei'+hei.to_s,'initx'+initx.to_s,'finx'+finx.to_s
if wid>=hei
for i in 0..((finx-initx).abs-1)
k+=1
x+= initx<finx ? 1 : -1
y=(x-x0)*1.0*ay/ax+y0
bmp.set_pixel(x,y,white)
bmp.set_pixel(x,y+1,half)
bmp.set_pixel(x,y-1,half) if bmp.get_pixel(x,y-1)!=white
bmp.set_pixel(x-1,y,half) if x==[initx,finx].min+1
bmp.set_pixel(x+1,y,half) if x==[initx,finx].max-1
bmp.fill_rect(x+1,y-1,1,3,half)
bmp.set_pixel(x+1,y,white)
if (k%5 == 0) and anim
Graphics.update
update
end
end
else
for i in 0..((finy-inity).abs-1)
k+=1
y+= inity<finy ? 1 : -1
x=(y-y0)*1.0*ax/ay+x0
bmp.set_pixel(x,y,white)
bmp.set_pixel(x-1,y,half)
bmp.set_pixel(x+1,y,half) if bmp.get_pixel(x+1,y)!=white
bmp.set_pixel(x,y-1,half) if y==[inity,finy].min+1
bmp.set_pixel(x,y+1,half) if y==[inity,finy].max-1
bmp.fill_rect(x-1,y+1,3,1,half)
bmp.set_pixel(x,y+1,white)
if (k%5 == 0) and anim
Graphics.update
update
end
end
end
# p 10
end
Но метод линию не рисует. В чем проблема?