来年度のコンテスト応募作品に組み込むために作っていたモジュールを載せます。
塗り潰し型なので、中空にしたかったらサイズを一回り小さくしたものを背景色で
もう一度描画すればOKです。
モジュールのファイル名は何でもいいですが、「Mod_RegularPolygon.as」をおすすめします。
;「Mod_RegularPolygon.as」
;正多角形描画モジュール
;by FunnyMaker
;2012/10/7
; [書式]
; Mod_RegularPolygon P1,P2,P3,P4,P5
; P1 = (外接円のx座標)
; P2 = (外接円のy座標)
; P3 = (頂点の数) ≧ 3
; P4 = (外接円の半径) ≧ 1
; P5 = (左回りの傾き(°))
; 現在選択されているウィンドウに現在選択されている色で正多角形を描画します。
; 描画が正常に終了したら stat の値が0に、エラーが発生した場合は stat の値が1になります。
#module Mod_Name_RegularPolygon
#deffunc Mod_RegularPolygon int center_x ,int center_y ,int num_top ,int radius ,int startθ
if num_top < 3 : return 1;頂点の数が少なすぎたらエラー
if radius < 1 : return 1;外接円の半径が小さすぎたらエラー
dim arrange_x,4 : dim arrange_y,4
repeat num_top
arrange_x(0) = int(center_x + double(radius)*cos(deg2rad(double(360)/double(num_top)*double(cnt + 1) + double(startθ)) + m_pi/double(2))),int(center_x + double(radius)*cos(deg2rad(double(360)/double(num_top)*double(cnt) + double(startθ)) + m_pi/double(2))),center_x,center_x
arrange_y(0) = int(center_y - double(radius)*sin(deg2rad(double(360)/double(num_top)*double(cnt + 1) + double(startθ)) + m_pi/double(2))),int(center_y - double(radius)*sin(deg2rad(double(360)/double(num_top)*double(cnt) + double(startθ)) + m_pi/double(2))),center_y,center_y
gsquare -1,arrange_x,arrange_y
loop
return 0
#global
下のサンプルコードで試してみてください。
#include "Mod_RegularPolygon.as"
screen 0,800,600
randomize
redraw 0
repeat 100
color rnd(255),rnd(255),rnd(255)
Mod_RegularPolygon rnd(800),rnd(600),rnd(10) + 3,rnd(100) + 1,rnd(360)
await 0
loop
redraw 1
wait 200
color 0,0,0 : Mod_RegularPolygon 300,300,5,200,0
描画時にちらつく時はredraw0をしてこのモジュールを実行してからredraw1をしてください。