以下 しまくろねこ(本物)さんに教えて頂いたモジュールです。
PC上でテストをする時にすごく良いです。
以下転載です。
2022/12/25(Sun) 21:17:22 NO.97611
スクリーン自動縮小を今モジュール化していますが、viewcalc命令が適用されると、boxfの値省略が効かないみたいなんですね。
下記で確認できると思います。
#include "hsp3dish.as"
;-----------------------------------------------------
;
; HSP3.x Dish用スクリーンモジュール「mod_screen.as」
;
; Windows版のDishで有効です
;
; ディスプレイの解像度よりも、指定したウィンドウサイズのほうが大きい場合、ウィンドウサイズを自動調整する
; ディスプレイの解像度よりも、指定したウィンドウサイズのほうが小さい場合、ウィンドウサイズはそのまま
;
; Ver 0.1 (※注意:事前に「hsp3dish.as」をインクルードしてください)
;
; By. しまくろねこ
;
; https://sites.google.com/site/simakuroneko/
; http://simakuroneko.bbs.fc2.com/
; simakuroneko@gmail.com
;
;-----------------------------------------------------
#ifndef __MOD_SCREEN__
#define __MOD_SCREEN__
#module mod_screen
;-----------------------------------------------------
; zoomxy(元の横大きさ, 元の縦大きさ, 変更したい横大きさ)
;-----------------------------------------------------
#defcfunc local zoomxy int moto_x, int moto_y, int henkou_x
return (henkou_x * 1000 / moto_x) * moto_y / 1000
;-----------------------------------------------------
; zoomyx(元の横大きさ, 元の縦大きさ, 変更したい縦大きさ)
;-----------------------------------------------------
#defcfunc local zoomyx int moto_x, int moto_y, int henkou_y
return (henkou_y * 1000 / moto_y) * moto_x / 1000
;-----------------------------------------------------
; screen_resize ウィンドウの横サイズ, ウィンドウの縦サイズ, ウィンドウサイズを自動縮小された場合に横にマイナスする値, ウィンドウサイズを自動縮小された場合に縦にマイナスする値
;-----------------------------------------------------
#deffunc screen_resize int screen_width_size, int screen_height_size, int screen_width_minus, int screen_height_minus
plat_form = PLATFORM_WINDOWS
getreq plat_form, SYSREQ_PLATFORM
if plat_form == PLATFORM_WINDOWS {
if (ginfo_dispx < screen_width_size) || (ginfo_dispy < screen_height_size) {
; ディスプレイの解像度よりも、指定したウィンドウサイズのほうが大きい場合、ウィンドウサイズを自動縮小する
window_size_change_width = ginfo_dispx - screen_width_minus
window_size_change_height = ginfo_dispy - screen_height_minus
window_size_y = zoomxy@mod_screen(screen_width_size, screen_height_size, window_size_change_width)
window_size_x = zoomyx@mod_screen(screen_width_size, screen_height_size, window_size_change_height)
if window_size_x > ginfo_dispx {
window_size_change_width = ginfo_dispx - screen_width_minus
window_size_y = zoomxy@mod_screen(screen_width_size, screen_height_size, window_size_change_width)
window_size_x = zoomyx@mod_screen(screen_width_size, screen_height_size, window_size_y)
}
if window_size_y > ginfo_dispy {
window_size_change_height = ginfo_dispy - screen_height_minus
window_size_x = zoomyx@mod_screen(screen_width_size, screen_height_size, window_size_change_height)
window_size_y = zoomxy@mod_screen(screen_width_size, screen_height_size, window_size_x)
}
screen 0, window_size_x, window_size_y, 0, (ginfo_dispx - window_size_x) / 2, (ginfo_dispy - window_size_y) / 2
scale_x = double(window_size_x) / double(screen_width_size)
scale_y = double(window_size_y) / double(screen_height_size)
; 描画時の座標変換を設定
viewcalc vptype_2d, scale_x, scale_y
} else {
; ディスプレイの解像度よりも、指定したウィンドウサイズのほうが小さい場合、ウィンドウサイズはそのまま
screen 0, screen_width_size, screen_height_size, 0, (ginfo_dispx / 2) - (screen_width_size / 2), (ginfo_dispy / 2) - (screen_height_size / 2)
}
}
return
#global
; 横幅:1080
; 縦幅:2340
; ディスプレイ解像度の横幅よりも指定した横幅(1080)が大きい場合にリサイズされたときに横幅をマイナスする値
; ディスプレイ解像度の縦幅よりも指定した縦幅(2340)が大きい場合にリサイズされたときに縦幅をマイナスする値
screen_resize 1080, 2340, 0, 150
redraw 0
color 0, 0, 255 : boxf
color 255, 0, 0 : circle 0, 0, 1079, 2339
redraw 1
stop