ページ 11

初心者です

Posted: 2009年2月12日(木) 17:02
by イケ
はじめまして。
c言語をはじめたばかりの超初心者です。
質問なんですが、今HPを見ながらDXライブラリの勉強をしてて、ふたつ分からないことがありました。
ひとつは、ソースを短くするという項目に

(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE])

というのがありまして、関数ひとつひとつに、[!]がついている意味が分かりません。
自分が勉強不足な面もあるかと思いますが、もしかしたら基本的なことが
分かってないのかも知れません。

二つ目は、キャラを四方向に移動という項目に

[(ch.x%32+ch.y%32)/8+ch.muki*4];

があったのですが、自分の脳みそをフル稼働させてもさっぱりでしたw
基本は勉強したのですが、応用的なものは苦手なんです‥
よろしければ、分かりやすく教えてくださいm(_ _)m

Re:初心者です

Posted: 2009年2月12日(木) 17:29
by kazuoni
!は論理演算子の否定です。
以下のサイト等を見てみてください。
http://www.geocities.jp/ky_webid/c/012.html

http://dixq.net/g/#22
以上うまく説明できるか分かりませんが・・・

例えば+x方向(右)に歩かせるとします。
この時、muki=3です。
その時yの座標は32で割り切れるところにいます。
ゆえにch.y%32=0です。
ch.xですが、歩き始めるとインクリメントされていきます。
ch.xは0,1,2,3,....と1ずつ増加するということです。
この時画像を歩いているようにしたいのですが、
今回サンプルで用いている画像は右歩きに4枚の画像があります。
一区間32なのですから、一区間で一枚の画像の表示に使う区間は32/4=8です。
ゆえに8の倍数ごとに画像を切り替えればよいのです。
なので(ch.x%32+ch.y%32)/8としています。
今回の場合、ch.xを32で割った余りが
0~7のとき右歩き画像0番目
8~15のとき右歩き画像1番目
16~23のとき右歩き画像2番目
24~31のとき右歩き画像3番目

ch.muki*4はキャラチップ(char.png)を見たらわかるのですが、
配列に格納する時は
http://dixq.net/g/#17
のようになっています。
右向き画像は12~15です。
上でもう順番はできています。あと必要なのは?
12を足すことです。
ゆえにmuki*4は右歩きの時
3*4=12
となります。

Re:初心者です

Posted: 2009年2月12日(木) 17:31
by non
!は否定です。
aが0か1を取るとき
0のときに何か処理をしたいとき
if(a==0) と書けますよね。
これを、
if(!a)と書くことができます。
ifの()の中には条件式を書くわけですが、条件が成立したとき(TRUE)のとき0以外(通常は1)
不成立のとき(FALSE)0と考えます。ですから、
if(a==0) のとき aが0だった場合はa==0はTRUEなので if(1) になります。
a=0なので、!aは1です。
ですから、if(!a)と書けるわけです。

Re:初心者です

Posted: 2009年2月13日(金) 03:23
by イケ
なるほど。なんか分かったきがします。
ありがとうございました。