早いコード + BytePtr

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

早いコード + BytePtr

#1 投稿記事 by MML »

ゆちボンです.
最近ゲームらしきものを作っているんですが、GetPixelが遅いということを聞いたことがあるので、HSPでは、VRAMというやつをいじくればOKとは聞いたことがあるのですが
ABではやったことがないので、知っている方、教えてください。
あと、PCによってはBitBltが遅いということを聞いたのでどうすれば早くなるか、教えてください。

それと、
BytePtrの使いかたってこんな感じでいいんですか?

コード: 全て選択

Dim A As BytePtr

'↓ここはcallocがいいんですか?mallocがいいんですか?
A=malloc(10)

'10バイト入れる
lstrcpy(A,"ABCDEFGHIJ")

'再度入れる
free(A)
A=malloc(15)

'15バイト入れる
lstrcpy(A,"ABCDEFGHIJKLMNO")
free(A)
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#2 投稿記事 by イグトランス »

GetPixelは遅かったとしても,それが問題になるまでは気にする必要はないと思いませんか。
まずは作ってみて,それが我慢ならないほどだったら,そのときに改めて考え直せばいいのです。
それよりもゲームだったらいかにいいものを作るかということに力を注いだほうがいいと思いますよ。

BytePtrについてですが,文字列の終わりを表すヌル文字(\0)が1文字を占めるので,それぞれ1ずつ確保するメモリの量が足りませんが,それ以外の扱い方は間違っていません。
すぐにlstrcpyで中身を書き込むのでわざわざcallocを使う必要はありません。
konisi
記事: 893
登録日時: 2005年7月25日(月) 13:27
お住まい: 埼玉県東松山市
連絡する:

#3 投稿記事 by konisi »

GetPixelは確かにVRAMを直接叩くよりは遅いですが、VRAMのどの位置に欲しいデータが在るのかと言った計算に、現在のウインドウの位置を取得する必要があるのでGetWindowRect呼び出してABで掛け算やってとしていると逆に遅くなるかもしれません(w
ウインドウの描画領域が最大化していればそこそこスピードは出ますが、そっちより他の事で最適化が必要な言語なので、他の部分で色々試してみてください。

http://smile.poosan.net/perl-bin/hsp/ve ... 050010.txt
此処あたりが参考になります。僕はABでの方法は分かりません。

BytePtrのほうは、何度も再確保する場合はReallocというすばらしい関数があるので調べてみてください。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

#4 投稿記事 by MML »

>GetPixelは遅かったとしても,それが問題になるまでは気にする必要はないと思いませんか。
>まずは作ってみて,それが我慢ならないほどだったら,そのときに改めて考え直せばいいのです。
>それよりもゲームだったらいかにいいものを作るかということに力を注いだほうがいいと思いますよ。
はい。わかりました。

>BytePtrについてですが,文字列の終わりを表すヌル文字(\0)が1文字を占めるので,それぞれ1ずつ確保するメモリの量が足りませんが,それ以外の扱い方は間違っていません。
>すぐにlstrcpyで中身を書き込むのでわざわざcallocを使う必要はありません。
ということは...

コード: 全て選択

Dim A As BytePtr

A=malloc(11)

'10バイト入れる
lstrcpy(A,"ABCDEFGHIJ")

'再度入れる
A=realloc(16)

'15バイト入れる
lstrcpy(A,"ABCDEFGHIJKLMNO")
free(A) 

でいいんでしょうか?


> GetPixelは確かにVRAMを直接叩くよりは遅いですが、VRAMのどの位置に欲しいデータが在るのかと言った計算に、現在のウインドウの位置を取得する必要があるのでGetWindowRect呼び出してABで掛け算やってとしていると逆に遅くなるかもしれません(w
> ウインドウの描画領域が最大化していればそこそこスピードは出ますが、そっちより他の事で最適化が必要な言語なので、他の部分で色々試してみてください。
>
> http://smile.poosan.net/perl-bin/hsp/ve ... 050010.txt
> 此処あたりが参考になります。僕はABでの方法は分かりません。
HSPではわかるんですが、、、やめておきましょう。

> BytePtrのほうは、何度も再確保する場合はReallocというすばらしい関数があるので調べてみてください。
探しました。これは、、、freeを使わなくていいんですよね?

あと、もし知っている方がいれば、教えてください。
HSPで「gsquare」見たいなことができるWinAPIまたはDLLがあるんでしょうか?
OverTaker
記事: 231
登録日時: 2005年5月31日(火) 17:14
お住まい: 茨城県

#5 投稿記事 by OverTaker »

イグトランス さんが書きました:すぐにlstrcpyで中身を書き込むのでわざわざcallocを使う必要はありません。
これはおそらく、再確保する必要がないと言ってるんだと思います。確保は基本的に時間のかかる動作ですので、問題がなければ、最初から必要な分のメモリを一気に確保しておくべきだと思います。

コード: 全て選択

Dim A As BytePtr 

A=calloc(100) '余裕を持って確保

lstrcpy(A,"ABCDEFGHIJ") 

lstrcpy(A,"ABCDEFGHIJKLMNO") 
free(A) 
MML
記事: 154
登録日時: 2006年5月02日(火) 16:27

#6 投稿記事 by MML »

OverTakerさん、返信ありがとうございます。
>
イグトランス さんが書きました:すぐにlstrcpyで中身を書き込むのでわざわざcallocを使う必要はありません。
> これはおそらく、再確保する必要がないと言ってるんだと思います。確保は基本的に時間のかかる動作ですので、問題がなければ、最初から必要な分のメモリを一気に確保しておくべきだと思います。
>

コード: 全て選択

Dim A As BytePtr 
> 
> A=calloc(100) '余裕を持って確保
> 
> lstrcpy(A,"ABCDEFGHIJ") 
> 
> lstrcpy(A,"ABCDEFGHIJKLMNO") 
> free(A) 
ほうあ!そんな方法があったとは..
Stringから抜け出して、 BytePtrを勉強してみると、なかなか面白いですね!
どうもありがとうございました。
返信する