[過去ログ] Delphiゲームプログラミング相談室 (976レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
919(1): 名前は開発中のものです。 [] 2006/05/30(火) 12:53:26 ID:JUitY34u(1) AAS
ポインタ操作ってどうやるの?
p,v: Pointer;
vにpからある一定の大きさだけ後ろのアドレスを指定したい
v := p;
Inc(PBYTE(v),ある一定の大きさ);
これをやるとpのアドレスまで変わってしまう?
920: 名前は開発中のものです。 [sage] 2006/05/30(火) 13:26:58 ID:+X21N2Yf(1) AAS
v = pointer(integer(p)+100);
スマートじゃないなあ・・・
921: 名前は開発中のものです。 [sage] 2006/05/30(火) 14:11:20 ID:ss191I5G(1) AAS
>これをやるとpのアドレスまで変わってしまう?
変わらない。
922(2): 名前は開発中のものです。 [] 2006/05/30(火) 14:21:37 ID:G3qDWiPC(1/2) AAS
>>919ので間違いではない
v:=pやっても別にpのアドレスはかわらん
だが、Pascalでは、
v := @( PByteArray(p)[ n ] );
ってな書き方をする方が多いと思う。
そういうわけで、Pointer型なんかよりは、PByteArrayを多用すると楽ちん
923: 名前は開発中のものです。 [] 2006/05/30(火) 18:29:57 ID:2UT4+Oju(1) AAS
俺もほとんど生ポインタ使わんな
>>922みたいに、バイト配列にキャストしてIndexでアクセスする
924(1): 名前は開発中のものです。 [] 2006/05/30(火) 18:40:41 ID:Dsd2Lvyv(1) AAS
>>922
PByteArrayなんてあったんだー
これは便利だ!!
925: 名前は開発中のものです。 [] 2006/05/30(火) 20:38:51 ID:G3qDWiPC(2/2) AAS
>>924
sysutilsにて定義されている
自分で定義するなら、
type
PByteArray=^TByteArray ;
TByteArray=array[0..1023] of byte ;
ってなとこ
926: 名前は開発中のものです。 [sage] 2006/05/31(水) 02:31:11 ID:jPRHLqEG(1) AAS
DirectXの頂点バッファってロックしてポインタで取得するでしょ
あれを取得するときに使えるワザだなと
PByteArrayで取得して40バイトずつずらしてユーザー定義の構造体に
キャストする
927: 名前は開発中のものです。 [] 2006/05/31(水) 13:57:33 ID:Ka6gjiAS(1) AAS
それだったら、最初からユーザー定義の構造体の配列とそのポインタ作った方がよくね?
928(1): 名前は開発中のものです。 [sage] 2006/06/01(木) 20:19:20 ID:jyfWqyoY(1) AAS
このスレ最近知って読んでるんだが。
スクリプトエンジン作ってる言う人が結構いたけど
Delphiでパーサージェネレーターってあるの?
929: 名前は開発中のものです。 [sage] 2006/06/01(木) 21:03:05 ID:ulKxJS9r(1) AAS
>>928
yacc/lex Delphi でぐぐる
930: 名前は開発中のものです。 [] 2006/06/02(金) 01:05:48 ID:Dy3JqRf/(1) AAS
俺は再帰下降構文解析でやってるが、デバッグしねる。
コンパイラコンパイラ使ったほうがいいよ・・・
931(1): 名前は開発中のものです。 [sage] 2006/06/02(金) 01:49:38 ID:CLlntjIq(1/3) AAS
v := @( PByteArray(p)[ n ] );
だと要素のアドレスだから嫌い。
V := Pointer(Integer(P) + 40);
だな。
932: 名前は開発中のものです。 [] 2006/06/02(金) 02:12:19 ID:aIT54UI1(1/2) AAS
>>931
おれはポインタを整数型にする方が気持ち悪いが、
まあ、人それぞれだろ。
933(1): 名前は開発中のものです。 [sage] 2006/06/02(金) 03:30:28 ID:40xc9cjN(1/3) AAS
マイナスにならないならIntegerよりByteかWordを使うべきだよね
forのループカウンタとかも、Integerにすべきじゃないよね
934: 名前は開発中のものです。 [] 2006/06/02(金) 04:14:32 ID:aIT54UI1(2/2) AAS
>>933
そんな餌に釣られるクマー(AA略
935: 名前は開発中のものです。 [sage] 2006/06/02(金) 04:17:20 ID:CLlntjIq(2/3) AAS
そう言えば、Integer型とポインタ型に互換性が無くなると問題になりますね。
でもコンパイラエラーが出るのかな。
936: 名前は開発中のものです。 [sage] 2006/06/02(金) 04:28:53 ID:CLlntjIq(3/3) AAS
いや待てよ、MaxInt + 40 でオーバーフローが出るのか。
データは2G以下のアドレスにあるから偶々出ていないだけで
問題のあるコードかもしれない。 LongWordでキャストするべきなのかな。
937(2): 名前は開発中のものです。 [sage] 2006/06/02(金) 19:57:20 ID:40xc9cjN(2/3) AAS
Integerがオーバーフローするとマイナス値になって、しかもエラーを
吐かない、難しいバグになるでしょ
なんでもかんでもIntegerを使うのは危険かもしれない
938: 名前は開発中のものです。 [] 2006/06/02(金) 20:08:38 ID:Qv1KmChy(1) AAS
>>937
だからByteかWord使えってのかwww?
939: 名前は開発中のものです。 [sage] 2006/06/02(金) 21:53:04 ID:40xc9cjN(3/3) AAS
LongWordでもCardinalでもいいけどさ
940: 名前は開発中のものです。 [sage] 2006/06/02(金) 23:37:56 ID:HfHloQil(1) AAS
>>937
{$R+, Q+}
ならちゃんとEIntOverflowが出るよ。
{$R-,Q-}だと出ないけど、そもそもマイナス値になってもアドレスとしては正しいのでは?
ちなみに配列の大きさはMaxIntまでだから、Byte型配列の場合は
0..MaxInt-1まで有効。 範囲チェックを切った状態でMaxInt以上に
アクセスした時どうなるかは知らない。
941(2): 名前は開発中のものです。 [] 2006/06/03(土) 01:57:53 ID:8lrmUmFG(1) AAS
こんな本見つけた
ちと古いが
Delphiなら……ゲームが作れる!―アクション/シューティング/RPG/ADV/育成/パズル/SLG……ゲームプログラミングの全エッセンス!
外部リンク:www.amazon.co.jp
942: 名前は開発中のものです。 [sage] 2006/06/03(土) 11:22:47 ID:DadOjMCi(1) AAS
>>941
評価低くなかったっけ
943: 名前は開発中のものです。 [sage] 2006/06/03(土) 16:07:08 ID:9aoSFblr(1) AAS
>>941
その本のソース、全部ネットで落とせるから買うのはお勧めできない。
上下前次1-新書関写板覧索設栞歴
あと 33 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.027s