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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0308
ちぇりっくobaqで大量にオブジェクトを発生させると落ち着かない6解決


ちぇりっく

リンク

2010/3/8(Mon) 23:31:55|NO.31111

言葉で形容し難いので、次のソースを実行してみて頂きたいです。


#include "obaq.as" qreset qborder -82,-1000,562,422 : qview 1,1 repeat 30 s=rnd(50)+30 qaddpoly data,rnd(4)+3,rnd(640-s*2)+s,rnd(1000)-600,rnd(100),s,s loop *main redraw 0 color 0,0,0 : boxf qexec : qdraw redraw 1 wait 1 goto *main

サンプルのtest2.hsp等では、多くのオブジェクトがあってもここまで暴れないんですが、
このソースではなぜここまで暴れてしまうのでしょうか?
違いというと表示範囲を変更したりしている点くらいしか見あたらないのですが…
解決方法を教えて頂けたらありがたいです。



この記事に返信する


しきり2

リンク

2010/3/8(Mon) 23:45:56|NO.31112

アバウトな説明ですいませんが、

1m^3ぐらいの水槽があったとします。
test2.hspは砂が入っているとすると、
あなたのサンプルは、手のひら大の石がはいっているかんじですね。
揺らすと、砂なら大きな動きは見せないけれど、
石はけっこうゆれますよね?


don't think and feel いい言葉です。



GENKI

リンク

2010/3/9(Tue) 00:06:50|NO.31114

とりあえず気になったこと。qviewを先にするといいですよ。

#include "obaq.as" qreset qview 1,1 qborder -320, -240, 320, 240 ;ウィンドウと等倍なのできりがいい数値になります。 repeat 30 s=rnd(50)+30 qaddpoly data,rnd(4)+3, rnd(640-s*2)+s, rnd(480-s*2)+s, rnd(100), s, s loop ...

> このソースではなぜここまで暴れてしまうのでしょうか?

qdamper命令で吸振を大きくしても効果ないようです。
数が多いので計算誤差が大きくなってるんだと思います。
どうしたものか…。



ちぇりっく

リンク

2010/3/9(Tue) 01:23:06|NO.31120

お二人とも、返信して頂きありがとうございます。

吸振等も色々いじってみたんですがどれもダメでした。
やはり単なる計算誤差ということなんでしょうか。

表示等の際にいちいち座標値変換の命令を通すのが若干面倒だったので
無理やり内部座標をウィンドウの座標と合わせようかと思ってたんですが無理みたいですね。

あまり深いこと考えずに大人しく小さめのサイズのままやりたいと思います。
don't think and feel いい言葉ですよね。



GENKI

リンク

2010/3/9(Tue) 22:20:31|NO.31138

> 表示等の際にいちいち座標値変換の命令を通すのが若干面倒だったので
> 無理やり内部座標をウィンドウの座標と合わせようかと思ってたんですが無理みたいですね。

qborderのときの座標系とオブジェクトの座標系は異なります。
結果的にはNO.31111でちゃんと出来てるから、そこは問題ないと思います。
この仕様は、個人的にはわかりにくいと感じます。


#include "obaq.as" qreset ;表示倍率設定 qview 1,1 ;1単位=1ドット ;オフセットは0のままにすること。 ;この命令は最初にしておくのがいい。 ;外壁をウィンドウ全体へ qborder -ginfo_winx/2, -ginfo_winy/2, ginfo_winx/2, ginfo_winy/2 ;外壁の座標はなぜかウィンドウ中心が0,0とされている。 ;オブジェクト配置 ;以下、ウィンドウ座標と表示座標は一致。 qaddpoly data, 3, 0, 0, , 50, 50, 0 qaddpoly data, 4, ginfo_winx/2, ginfo_winy/2, , 50, 50, 0 qaddpoly data, 5, ginfo_winx, ginfo_winy, , 50, 50, 0 ...以下略


> やはり単なる計算誤差ということなんでしょうか。

数が多いことによる誤差の累積かと思ったんですが、
モデル1個でも極まれに地面で急に跳ねることがありました。
どうやったか忘れてしまいましたが…。謎です。



あり

リンク

2010/3/9(Tue) 23:41:53|NO.31140

obaqで積み重なったオブジェクトを安定させるのには
結構な調整が必要になるのですが、質問のスクリプトに関しては
qweightのモーメント値を大きくすれば落ち着いてくれますね。

#include "obaq.as" qreset qborder -82,-1000,562,422 : qview 1,1 repeat 30 s=rnd(50)+30 qaddpoly data,rnd(4)+3,rnd(640-s*2)+s,rnd(1000)-600,rnd(100),s,s qweight data, ,10000.0 ;5〜6000くらいが目安 loop *main redraw 0 color 0,0,0 : boxf qexec : qdraw redraw 1 wait 1 goto *main
10000にするといい感じで止まってくれました。



ちぇりっく

リンク

2010/3/10(Wed) 15:50:33|NO.31142

更に回答ありがとうございます。

>>GENKIさん
qviewの件、報告し忘れてました^^;
qviewを先にした方がqborderで指定する値が分かりやすくなるんですね。
それでもウィンドウの中心が0,0なのは若干違和感が残りますよね…

>>ありさん
モーメントは盲点でした。
あれは回転がしやすいせいでガタガタしていたんですね。
これでウィンドウの座標そのままにオブジェクトを配置出来そうです。

回答して頂いた皆さん、本当にありがとうございました!



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