|
|
2014/12/19(Fri) 17:19:08|NO.66503
スクリプトから
screen 0,1980,1200 //ここを変えてみてください。
buffer 120
color
boxf 0,0,400,400
gsel 0,1
px = 0.0 : py = 0.0 ;座標
vx = 0.0 : vy = 0.0 ;速度
ax = 0.0 : ay = 0.0 ;加速度
g = 1.0 ;重力加速度
a=-400
repeat 100
redraw 2
color 255,255,255,boxf:color
ax = 0.0
ay = g ;重力
if (osita==0){
vx += ax ;速度の変化
vy += ay
}else{
vx -= ax ;速度の変化
vy -= ay
}
px += vx ;座標
py += vy
if py>400{ ;地面衝突
vyi = vy*vy -ay*(py - 400.0)
if vyi>0 {
vy = sqrt(vyi) * -0.5 ;跳ね返り係数 -0.8
} else {
vy = 0.0
}
py = 400.0
}
pos px,py-400
gmode 3,400,400,190
gcopy 120, 0, 0, 400, 400
redraw 1
await
loop
このスクリプトはboxfで作った四角形をバウンドさせるというものです。
このスクリプトをHSP標準ウインドウサイズで実行したときとHD画質で実行したときでは明らかに
スピードが変わります。
この問題を解決する方法はありますか?
|
|
2014/12/19(Fri) 17:51:11|NO.66504
予め動く場所が決まっているのならredrawで範囲を指定してあげればいいのです
あと1980ってなっていますが1920の間違いですよね
screen 0,1920,1200 //ここを変えてみてください。
buffer 120
color
boxf 0,0,400,400
gsel 0,1
px = 0.0 : py = 0.0 ;座標
vx = 0.0 : vy = 0.0 ;速度
ax = 0.0 : ay = 0.0 ;加速度
g = 1.0 ;重力加速度
a=-400
repeat 100
redraw 0;,0,0,400,400
color 255,255,255,boxf:color
ax = 0.0
ay = g ;重力
if (osita==0){
vx += ax ;速度の変化
vy += ay
}else{
vx -= ax ;速度の変化
vy -= ay
}
px += vx ;座標
py += vy
if py>400{ ;地面衝突
vyi = vy*vy -ay*(py - 400.0)
if vyi>0 {
vy = sqrt(vyi) * -0.5 ;跳ね返り係数 -0.8
} else {
vy = 0.0
}
py = 400.0
}
pos px,py-400
gmode 3,400,400,190
gcopy 120, 0, 0, 400, 400
redraw 1,0,0,400,400
await
loop
|
|
2014/12/19(Fri) 18:40:52|NO.66506
ウェイトが0だから処理に時間がかかれば遅くなるのは当然
PCの性能によっても速度が変わってしまう
普通はawait 16ぐらいにして
秒間60フレームの時に好みの移動速度になるように調節する
|
|
2014/12/19(Fri) 18:53:08|NO.66507
まとめ
・ redraw で範囲指定すれば画面全体を更新する必要がなくなる。
・ awaitを調節してすべて同じにする
kanahiron さん実は1980なんです私のディスプレイ
一般的には1920でしたすみません。
|
|
2014/12/21(Sun) 20:16:53|NO.66531
もう一つ質問
color 255,255,255,boxf:color
の部分を 背景画像にしたいのですが、
1、 背景をgzoomでscreenサイズ(ginfo(10),ginfo(11))にする
2、ズームした画像を表示
3、boxf四角形が動く部分の画面更新をgzoomした画像の一部切り取りをして貼り付け
とするにはどうすればよいのでしょうか?
|
|
2014/12/21(Sun) 21:41:45|NO.66532
そこまで頭の中で手順化できてるなら
まずは判るところまでスクリプトを書いてみては。
そうしたほうが疑問点がハッキリして回答も的確になる。
|
|
2014/12/22(Mon) 18:41:51|NO.66535
buffer 2:picload "画像名"
px=ginfo(12) :py=ginfo(13)
gsel 0,1
screen 1
gzoom ginfo(10),ginfo(11),2,0,0,px,py,1
gsel 0,1
gcopy 1,0,0,400,400
とすると正しく表示されるのに
buffer 2:picload "画像名"
px=ginfo(12) :py=ginfo(13)
gsel 0,1
buffer 1
gzoom ginfo(10),ginfo(11),2,0,0,px,py,1
gsel 0,1
gcopy 1,0,0,400,400
というようにbufferを使うとgcopyができなくなります。
|
|
2014/12/22(Mon) 19:28:15|NO.66536
bufferはウィンドウじゃ無いから
ウィンドウ全体のサイズを取得する
ginfoの10,11は使えない
使うならクライアント領域を取得する12,13か
初期化サイズを取得する26,27を使う
|
|
2014/12/22(Mon) 20:19:18|NO.66537
自己解決&解決(タイミングが...)
スクリプトのスパゲッティを直せば成功しました。
|
|