忍者ブログ

GAM-22のメモ

[HSP3メモ]知識

2024.04 ← 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 →

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2のn乗を求める

HSPで2のn乗を求めたいのなら、通常powf関数を用いて、以下のようにします。

; 2のn乗
n = 10
mes powf(2,n)

しかし、“2”のn乗に限れば、これだけで実現できます。

; 2のn乗
n = 10
mes 1<<n

ビットシフトを利用しているので高速ですし、使う機会もそこそこありそうです。覚えておいて損はないでしょう。なぜこれだけの処理で2のn乗が求まるのかが知りたければ、「ビットシフト」で調べることをお勧めします。

PR

OBAQでオブジェクトが揺れて落ち着かない

久しぶりにHSP掲示板を覗いたら、こんな質問を見つけました。

質問者さんは自己解決したようですが、OBAQはあまり大きいオブジェクトを作ろうとすると、揺れてしまって落ち着かなくなります。

ボウリングを作ろうとしたときに、qviewで表示倍率を1.0にしたら、ウィンドウとの座標変換が省けるなと全く同じことを考えて、全く同じ問題に直面しました。

結論から言うと、OBAQで大きな物体を作るには、小さい物体を作ってから表示倍率を上げて大きく見せるしかないです。

と思ったら、違ったみたいです。qweightのモーメント値を大きくすれば良かったようです。質問者の場合だと、10000くらいにすると、落ち着くそうです。

HSPTV APIを使うと、dialogで半角大文字で保存できない

HSPTV APIを使った状態で、dialog "*.*",17を使ってファイルを保存しようとすると、なぜかrefstrの中の大文字半角が小文字半角に変換されるという謎。

HSPのsdimのバッファ確保の罠

かれこれ、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の動作を誤解していると、大変なバグを生じる可能性がありますので、ご注意ください。

ウェブ上の画像を簡単に表示

ウェブ上の画像を表示したいと思った時、これだけで実現できます。

#include "mod_img.as"
	imgload "http://blog.cnobi.jp/v1/blog/user/354f95828a2d0bef40423056b5f3ea60/1180003508?w=490&h=500"
カテゴリー
カウンター
最新記事
最新コメント
Twitter
人気記事
Amazon お買い得情報
Amazon お買い得情報
プロフィール
自画像
HN :
GAM-22
性別:
男性
職業:
大学1年生
HSP暦:
6年
好きなもの :
ゲーム, アニメ, マヨネーズ
嫌いなもの :
運動, 注射, ホラー映画, 英語
好きなバンド :
Muse, Radiohead
その他 :
文章能力が欠如している
バナー
Copyright © GAM-22のメモ All Rights Reserved
Powered by ニンジャブログ Designed by ピンキー・ローン・ピッグ 忍者ブログ / [PR]