; 疑似3D道路を描画する / Drawing pseudo 3D roads #define BGROAD_FILE "bg_road.png" #define BG_FILE "bg_16col.png" #define SCR_W 640 #define SCR_H 360 ; 同梱ファイル / bundled files #pack BGROAD_FILE #pack BG_FILE #packopt name "road02a" ; 生成exeファイル名 / generated exe file name #packopt type 0 ; exeファイルの生成を指定 / exe file generate #packopt xsize SCR_W #packopt ysize SCR_H onkey goto *jobend ; ウインドウサイズを取得 / get windows size screen 0, SCR_W, SCR_H, 0 gsel 0 ; width SCR_W, SCR_H dispw = ginfo_winx disph = ginfo_winy cls 4 ; 道路画像を読み込み / load road image roadimgid = 6 buffer roadimgid, 1280, 1440 picload BGROAD_FILE roadimgw = ginfo_winx roadimgh = ginfo_winy ; 背景画像を読み込み / load bg image bgimgid = 4 buffer bgimgid, 1280, 720 picload BG_FILE bgw = ginfo_winx bgh = ginfo_winy dist = 150.0 ; 画面までの距離 / distance to screen angle = 0.0 scroll_z = 0 camera_x = 0 *mainloop ; ESC key to exit stick k if k & 128 : goto *jobend base_y = int(double(disph) * 0.5) road_y = 100 road_x = 300 h = disph - base_y camera_x = 0 ; camera_x = 600.0 * sin(deg2rad(angle * 0.75)) redraw 0 ; 描画開始 / draw start gsel 0 ; 背景(遠景)を描画 / draw BG gmode 0 ax = sin(deg2rad(double(angle) * 0.25)) * ((bgw - dispw) / 2) bg_x = (bgw / 2 - (dispw / 2)) + ax bg_y = bgh / 2 - base_y pos 0,0 gcopy bgimgid, bg_x, bg_y, dispw, disph ; gradf 0, (disph / 2), dispw, (disph / 2), 1, $449044, $080808 ; 道路を描画 / draw road repeat h scrn_y = h - cnt - 1 if scrn_y = 0 : continue road_z = road_y * dist / scrn_y scrn_x = road_x * dist / road_z center_x = (camera_x * dist / road_z) u = center_x + (roadimgw / 2) - (dispw / 2) addv = ((roadimgh / 2) * (((road_z + scroll_z) / 32) & $1)) v = scrn_x + addv ; 1ラスター分を描画 / drawing 1 raster pos 0, scrn_y + base_y gcopy roadimgid, u, v, dispw, 1 loop redraw 1 ; 描画終了 / draw end angle += 1 scroll_z += 10 await (1000 / 30) goto *mainloop *jobend end