HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
1219
nepisat解像度が上がるにつれて重くなる8解決


nepisat

リンク

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画質で実行したときでは明らかに
スピードが変わります。
この問題を解決する方法はありますか?



この記事に返信する


kanahiron

リンク

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フレームの時に好みの移動速度になるように調節する



nepisat

リンク

2014/12/19(Fri) 18:53:08|NO.66507

まとめ
・ redraw で範囲指定すれば画面全体を更新する必要がなくなる。
・ awaitを調節してすべて同じにする


kanahiron さん実は1980なんです私のディスプレイ
一般的には1920でしたすみません。



nepisat

リンク

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した画像の一部切り取りをして貼り付け

とするにはどうすればよいのでしょうか?



ZAP

リンク

2014/12/21(Sun) 21:41:45|NO.66532

そこまで頭の中で手順化できてるなら
まずは判るところまでスクリプトを書いてみては。

そうしたほうが疑問点がハッキリして回答も的確になる。



nepisat

リンク

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を使う



nepisat

リンク

2014/12/22(Mon) 20:19:18|NO.66537

自己解決&解決(タイミングが...)

スクリプトのスパゲッティを直せば成功しました。



ONION software Copyright 1997-2023(c) All rights reserved.