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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0813
rikuriku112233映像みたいに動かしたい11未解決


rikuriku112233

リンク

2014/8/13(Wed) 09:08:59|NO.63765

シューティングゲームなどで自機を
動かすとき、映像のように滑らかに
動いていますけど、初心者なので滑ら
かに動かす方法が分かりません。
動かすこと自体は出来るのですが、
カクカクになってしまうので、どなた
か動かす方法を教えてください。



この記事に返信する


テンクス

リンク

2014/8/13(Wed) 10:14:42|NO.63767

動きがカクカクになっているのはアニメーションのコマ数が少ないから。
つまり1秒間画面を更新して描画する回数をもっと増やせばカクカクではなくなる。



テンクス

リンク

2014/8/13(Wed) 10:18:54|NO.63768

...1秒間に画面を更新して絵画...
「に」が抜けてました。



Satio Soft

リンク

2014/8/13(Wed) 10:38:10|NO.63769

でも描画秒数を早くしたら、CPUがいっぱい動く必要があります。



SADOUS

リンク

2014/8/13(Wed) 11:38:31|NO.63772

どんなプログラムを組んでいるのか分かりませんけれど、

waitを使っているのなら安定したawaitにしたり
テンクスさんの言うようにFPSをあげたり。
Satio Softさんのいうように、無駄な部分を見直したりループ数を減らして
処理落ちを回避するなど。
標準命令だけではどうしても重くなってしまう場合もあるみたいで。



Satio Soft

リンク

2014/8/13(Wed) 11:59:09|NO.63773

うむ・・・。hgimg3でも使ってみたらどうですか?



暇人

リンク

2014/8/13(Wed) 16:47:14|NO.63779

どんな方法で動かしてたか分からないが
基本的な流れは↓

addx=3 px=320 repeat redraw 0 fps++ color 255,255,255 boxf color px+addx pos px,240 mes "●" if abs(px-320)>300 {addx*-1} timb=gettime(6) if timb ! tima {title "FPS("+fps+")":fps=0:tima=timb} await 16 redraw 1 loop



ZAP

リンク

2014/8/13(Wed) 18:29:13|NO.63784

業務用や家庭用のSTGは秒間60フレームで動作しているモノがほとんどです。
HSPでやろうとすると上の暇人さんのスクリプトのように、

await 16 (または17)

でウェイトをとることになります。
16ミリ秒×60フレーム で約1秒です。

逆に言うと、ループ1回当たりの処理が16ミリ秒以内で処理しきれないと
いわゆる「処理落ち」状態になります。

実行するPCの処理能力にもよりますが、弾や敵の数が増えると、
標準命令だけでは厳しいかも知れません。

妥協して秒間30フレームにする手もありますがお勧めはしません。
かなりガタガタになります。



テンクス

リンク

2014/8/13(Wed) 19:09:00|NO.63786

僕の作っているゲームはhgimg3を使っています。
数学の「三角関数」の基礎知識があればできると思いますよ。(そんなに難しくはないと思いますが、弾幕作ってるのは僕ではないのでhgimg3についてはわかりません。)



きのよー

リンク

2014/8/16(Sat) 00:34:17|NO.63852

カクカクになる、だけだと重いだけなのかredraw命令が抜けているだけなのか区別がつかない。
処理が重くて話しにならないのであれば、たとえば3D描画用のプラグインを使ってみたりする手があるし、
redraw命令を付け足して画面が正常に処理できるのならそれで解決。
あとcls命令やscreen命令を画面の初期化に使っていたらなおさら重い。


dim ball,100 //ボールの数だけ宣言、多くすると重くなってカクカクする ddim x,length(ball),2 ddim y,length(ball),2 dim col,length(ball),3 dim size,length(ball) randomize repeat length(ball) x(cnt,0)=double(rnd(640)) y(cnt,0)=double(rnd(480)) x(cnt,1)=0.1*(rnd(30)-rnd(60)) y(cnt,1)=0.1*(rnd(30)-rnd(60)) col(cnt,0)=rnd(192) col(cnt,1)=rnd(128)+128 col(cnt,2)=rnd(128)+64 size(cnt)=rnd(20)+20 loop *main redraw 0 //仮想画面モード、これがないとカクカクする(redraw 1と一緒に) color 0,0,0 boxf repeat length(ball) hsvcolor col(cnt,0),col(cnt,1),col(cnt,2) pos x(cnt,0),y(cnt,0) font MSGothic,size(cnt) mes "●" if x(cnt,0)+x(cnt,1)<=0:x(cnt,1)*=-1:x(cnt,0)=0.0:else:x(cnt,0)+=x(cnt,1) if y(cnt,0)+y(cnt,1)<=0:y(cnt,1)*=-1:y(cnt,0)=0.0:else:y(cnt,0)+=y(cnt,1) if x(cnt,0)+x(cnt,1)>=ginfo(12)-size(cnt):x(cnt,1)*=-1:x(cnt,0)=double(ginfo(12)-size(cnt)):else:x(cnt,0)+=x(cnt,1) if y(cnt,0)+y(cnt,1)>=ginfo(13)-size(cnt):y(cnt,1)*=-1:y(cnt,0)=double(ginfo(13)-size(cnt)):else:y(cnt,0)+=y(cnt,1) loop redraw 1 //実画面モード、これがないとカクカクする(redraw 0と一緒に) await 16 goto *main

参考になればいいけど……(ボソッ



kanahiron

リンク

2014/8/16(Sat) 00:48:04|NO.63853

質問とあまり関係ないかもですが、font命令ってめちゃくちゃ重いのでループ中にいちいち呼び出すものではありません
フォントの切り替えはこれが参考になると思います
http://hsp.tv/play/pforum.php?mode=pastwch&num=48145



きのよー

リンク

2014/8/16(Sat) 21:19:50|NO.63868

>>kanahiron さん
なるほどこんな手がありましたか……。参考になります。
とはいえ、今回は重くすることができるようにしていて
あえて重いfont命令を利用しているということでもあるので、
自作のソフトに応用したいと思います。ありがとうございます。

質問に全く関係無いものでごめんなさい。



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