HSPで2のn乗を求めたいのなら、通常powf関数を用いて、以下のようにします。
; 2のn乗 n = 10 mes powf(2,n)
しかし、“2”のn乗に限れば、これだけで実現できます。
; 2のn乗 n = 10 mes 1<<n
ビットシフトを利用しているので高速ですし、使う機会もそこそこありそうです。覚えておいて損はないでしょう。なぜこれだけの処理で2のn乗が求まるのかが知りたければ、「ビットシフト」で調べることをお勧めします。
久しぶりにHSP掲示板を覗いたら、こんな質問を見つけました。
質問者さんは自己解決したようですが、OBAQはあまり大きいオブジェクトを作ろうとすると、揺れてしまって落ち着かなくなります。
ボウリングを作ろうとしたときに、qviewで表示倍率を1.0にしたら、ウィンドウとの座標変換が省けるなと全く同じことを考えて、全く同じ問題に直面しました。
結論から言うと、OBAQで大きな物体を作るには、小さい物体を作ってから表示倍率を上げて大きく見せるしかないです。
と思ったら、違ったみたいです。qweightのモーメント値を大きくすれば良かったようです。質問者の場合だと、10000くらいにすると、落ち着くそうです。
HSPTV APIを使った状態で、dialog "*.*",17を使ってファイルを保存しようとすると、なぜかrefstrの中の大文字半角が小文字半角に変換されるという謎。
かれこれ、HSPを使い始めて4年目ですが、未だにちゃんと理解していない部分がありました。なんか悔しいので、紹介します。
sdim v1,256
とすると、v1という変数の領域を、256byte確保するものと思っていたのですが、
正確には、v1という変数の領域を、255byte + 終了コード(0)確保するようです。
つまり、nバイトの文字列変数を使うには、n+1バイトをsdimで確保し、変数の最後は、必ず0で終わるようにプログラムを書く必要があるようです。
↓のサンプルを見てください。
; 文字数、200未満なら問題無い #const max 200 ; メモリ確保 sdim v1,max ; データを'A'で埋める repeat max poke v1,cnt,'A' loop ; 200になるハズだが、206になる mes strlen(v1)
変数v1を、終了コードを無視して、データを書き込んだ場合、正常に文字列の長さを取得できなくなります。しかし、200byte未満の確保の場合、なぜか正常に動作しているようです。
ともかく、sdimの動作を誤解していると、大変なバグを生じる可能性がありますので、ご注意ください。