C言語何でも質問掲示板


必ずお読み下さい → 規約と注意事項  アンケートはこちら  エラーで投稿できない方はこちら  過去ログ検索はこちら

 
   BG背景のスクロールス ....   
     ・[37014] array 
     ・[37016] TRUTH 
     ・[37025] tomazo 
   ヘッダファイルの使い ....   
     ・[36978] toyo 
     ・[36989] 亀猫 
     ・[36993] ねこ 
     ・[37024] 亀猫 
   ウィンドウプロシージ ....   
     ・[37010] tkmakwins15 
     ・[37012] yu 
   3D背景が表示されなく ....   
     ・[37001] nayo 
     ・[37006] yrao 
     ・[37008] Justy 
     ・[37011] yrao 
   数学?   
     ・[36932] ねこ 
     ・[36933] Blue 
     ・[36935] non 
     ・[37003] SCI 
     ・[37004] box 
   VCについて質問してい ....   
     ・[36955] バグ 
     ・[37000] ゆみ 
     ・[37002] pooka 
   四角形と点の当たり判 ....   
     ・[36938] non 
     ・[36939] GPGA 
     ・[36940] チルチル 
     ・[36941] ねこ 
     ・[36942] チルチル 
     ・[36944] non 
     ・[36946] ねこ 
     ・[36949] チルチル 
     ・[36950] ねこ 
     ・[36952] チルチル 
     ・[36953] チルチル 
     ・[36954] Libra 
     ・[36956] チルチル 
     ・[36958] ねこ 
     ・[36959] チルチル 
     ・[36960] lbfuvab 
     ・[36961] チルチル 
     ・[36998] チルチル 
   Win32API オーナードロ ....   
     ・[36981] toyo 
     ・[36997] vion 
   ブロックでお絵かき   
     ・[36982] kazuoni 
     ・[36984] ひよこ 
     ・[36986] kazuoni 
     ・[36988] ひよこ 
     ・[36990] kazuoni 
     ・[36991] ひよこ 
     ・[36992] kazuoni 
     ・[36994] ひよこ 
   素朴な疑問   
     ・[36985] nayo 
     ・[36987] 狼太郎 
   無題   
     ・[36971] たかぎ 
     ・[36979] non 
   C++にて、ファイルのサ ....   
     ・[36925] Justy 
     ・[36976] なすがに 
   for文のことで   
     ・[36970] sizuma 
     ・[36973] sizuma 
     ・[36974] lbfuvab 
     ・[36975] まっさ 
   シフト演算についての ....   
     ・[36911] conio 
     ・[36962] LUNA 
   VC++について   
     ・[36957] バグ 
   3D描画時のメインルー ....   
     ・[36830] Justy 
     ・[36843] 土鳩 
     ・[36845] Dixq (管理人) 
     ・[36846] Justy 
     ・[36849] 土鳩 
     ・[36920] Justy 
     ・[36951] 土鳩 
   すいません;   
     ・[36945] たかぎ 
   自キャラが動かない   
     ・[36929] ねこ 
     ・[36934] pooka 
     ・[36936] s-rush 

Name: tomazo  ..ぴよぴよ(339ポイント)   Date: 2009/07/19(日) 16:45   No:37013       
Title: BG背景のスクロールスピード処理について    
 初めて投稿させていただきます。この場所をきっかけにプログラム始めました。
 
 現在、龍神録プログラミングの館25章のプログラムの所を勉強させていただいております。
 
龍神録プログラミングの館で、縦スクロールプログラム処理の学習途中ですが大変、沢山参考に

なります。少しスクロール処理での疑問がありました。過去ログを検索してもちょっと探せなかった

ので質問させていただきます。

 龍神録プログラミングの館のプログラムコードを使って、BG背景のスクロールスピードを速める方法です。

背景スピードを遅くするのは多分、描画前後のタイミングで少しウェイト処理を入れれば遅くなるんだろう

と思うのですが、BG背景スピードを今より速くする処理方法というのはないのでしょうか?

グラフィックカードやハードウェアの環境や性能などハードウェアの処理スピードに依存

してしまうのでしょうか?

参考になる情報、サンプルコードなどが御座いましたらよろしくお願いします。






339ポイント を手に入れた。


Name: array [URL]  ..熟練のプログラマー(51,188ポイント)   Date: 2009/07/19(日) 17:00   No:37014     
Title: Re:BG背景のスクロールスピード処理について    
はじめまして、tomazoさん

まず、背景を描画している箇所は分かりますか?

背景スクロールはcountを利用して毎フレーム描画位置をずらしていくことでスクロールしているかのように
みせています。

なので、countの値を1倍すれば、通常速度、2倍すれば2倍、0.5倍すれば低速度でスクロールしてくれると思います。


ちなみに、ウェイト処理を入れてしまうと、並列処理(マルチスレッドというのかな?)でもしてない限り、ゲーム全体に影響が出てしまいます。


49ポイント を手に入れた。

Name: TRUTH  ..入門者(3,166ポイント)   Date: 2009/07/19(日) 17:47   No:37016     
Title: Re:BG背景のスクロールスピード処理について    
こんにちは。はじめまして


スピードの調節はarrayさんの仰った方法で実装できます。
自分も龍神録プログラミングの館を使用して勉強しましたが
その疑問は、第43章「きっちりFPSを制御してみよう」でも解決する事も可能です。


簡単に言いますと、ハード(処理速度に関係するもの)に依存しないように
処理したあとにウェイトをかけて、どのPCでも同じように動いてるように見せています。
ですので、ウェイトを長くするということはゲームのスピード全体を遅くすることになってしまいます。
(弾の速度・動きまですべて)


197ポイント を手に入れた。

Name: tomazo  ..ぴよぴよ(657ポイント)   Date: 2009/07/19(日) 22:32   No:37025 解決!     
Title: Re:BG背景のスクロールスピード処理について    
arrayさん、TRUTHさん、こんばんは、初めまして。

早速の御回答ありがとうございます。

確かに思うような動きました。ありがとうございました。

まだ25章なのでもうちょっとがんばって45章も理解したいと思います。

時間軸に対しての処理は、どうも苦手だったんですけど、ここで勉強すれば多分

克服できそうに思えてきました。これからもお願いします。


2倍のポイントを手に入れた! 318ポイント を手に入れた。



Name: 亀猫  ..入門者(2,916ポイント)   Date: 2009/07/18(土) 03:06   No:36977       
Title: ヘッダファイルの使い方    
お世話になっております。亀猫です

今回はヘッダファイルの使い方について質問があります。

ヘッダファイルについて検索してみたところ、入門サイトに
「ヘッダファイルは、コンパイルしない」と書いてあったのですが、コンパイルできなかったら
なんのためにあるのでしょうか?


初歩的な質問ですみません・・・。


142ポイント を手に入れた。


Name: toyo  ..プログラマー(37,857ポイント)   Date: 2009/07/18(土) 07:57   No:36978     
Title: Re:ヘッダファイルの使い方    
単独ではコンパイルされないという意味でしょう
他のCやCPPファイルにインクルードされることでそのファイルと一緒にコンパイルされます


63ポイント を手に入れた。

Name: 亀猫  ..入門者(3,019ポイント)   Date: 2009/07/18(土) 12:29   No:36989     
Title: Re:ヘッダファイルの使い方    
>>他のCやCPPファイルにインクルードされることでそのファイルと一緒にコンパイルされます

何故ヘッダファイルに分けるんですか?
CPPファイルにインクルードされてコンパイルされるなら、CPPに全部の処理をするのと同じでは・・・。


103ポイント を手に入れた。

Name: ねこ  ..プログラマー(28,255ポイント)   Date: 2009/07/18(土) 13:18   No:36993     
Title: Re:ヘッダファイルの使い方    
ヘッダファイルの使い方は多様にありますが
例えばA.cppファイルにA,B,C関数というものを定義したとします。

それをB.cpp,C.cppで使用するにはそれぞれのcppファイルの上位に
void A();
void B();
void C();
というように記述する必要があります。
3つ程度なら良いですが、これが10,20の関数だった場合cppに逐一記述していくのは手間なので
A.hファイルに上記の内容を記述し、それらの関数を使う場所でincludeすると1行で済みます。
このような「共通記述」をヘッダファイルにまとめられます。

関数以外にも変数、定義と色々便利に使えるのでヘッダファイルが利用されます。


色々な人のプロジェクトを見てみると「あ〜こういう使い方もあるんだ〜」と分かってくるかもしれないですね。


6ポイント を手に入れた。

Name: 亀猫  ..入門者(3,029ポイント)   Date: 2009/07/19(日) 21:49   No:37024 解決!     
Title: Re:ヘッダファイルの使い方    
返信ありがとうございます。
まだ、よく分からないので様々のプログラムを見て参考にしてやってみます。


10ポイント を手に入れた。



Name: yu  ..プログラマー(36,661ポイント)   Date: 2009/07/19(日) 13:35   No:37005       
Title: ウィンドウプロシージャのクラス化    
こんにちは

現在C++とWin32APIを勉強しています。
そこでWinAPIを使ってなにか軽いツールでも作ってみようかな〜と思いましたが
ウィンドウプロシージャをどのようにしてクラス内のメンバ関数にすればいいのか分かりませんでした。
色々とサイト周って調べましたが、自分で書いてみるとうまく動きませんでした。

CreateWindow関数で毎回NULLが返されているようです。
メインウィンドウのウィンドウプロシージャを
MainWindow.cpp内に定義されている WndProc に変えてみたところ
NULLは返されずにうまく動きました。

ウィンドウプロシージャには関係無いですが、
今回初めてクラスを使ってプログラムを書いているので
どこかおかしなところがありましたら、教えていただけると幸いです。

どうかご教授お願いします m(_ _)m

OS:Windows Vista
VC++ 2008 EE


341ポイント を手に入れた。


Name: tkmakwins15  ..比類無きプログラマー(97,831ポイント)   Date: 2009/07/19(日) 16:06   No:37010     
Title: Re:ウィンドウプロシージャのクラス化    
CreateWindow関数を呼ぶと、WM_CREATEメッセージの前に、プロシージャに幾つかメッセージが送られてきます。
そして、そのメッセージは、DefWndProc関数に処理させる必要があります。ですので、globalProcでDefWindowProcを呼ぶ必要があります。


75ポイント を手に入れた。

Name: yu  ..プログラマー(36,733ポイント)   Date: 2009/07/19(日) 16:29   No:37012 解決!     
Title: Re:ウィンドウプロシージャのクラス化    
返信ありがとうございます m(_ _)m

仰られた通りに DefWndProc を追加すると
無事にプログラムが動作しました

MSDN にそれらしいことが書いてありましたね・・・
わざわざ説明して頂きありがとうございました


72ポイント を手に入れた。



Name: yrao  ..入門者(2,708ポイント)   Date: 2009/07/19(日) 00:07   No:36999       
Title: 3D背景が表示されなくなります    
こんばんは。
3D背景について質問です。

プログラミングの館のプロジェクトをベースにしたものに、60章のソースを加えてみたのですが、一つ問題が生じてしまいました。

ゲーム開始時は正常に表示されているのですが、敵弾に被弾すると、3D背景は消えて真っ暗になってしまいます。(背景以外は被弾後も正常に表示されています)



どのような問題が考えられるでしょうか。
漠然とした質問で申し訳ないのですが、どなたか教えて頂ければ幸いです。


209ポイント を手に入れた。


Name: nayo  ..中級者(11,602ポイント)   Date: 2009/07/19(日) 00:48   No:37001     
Title: Re:3D背景が表示されなくなります    
もうすでに試したかもしれませんが

Visual C++なら

まずはデバッグモードで起動し、被弾後背景が表示されなくなったら
背景を描画している関数にブレイクポイントを設置してみて関数自体が呼ばれてるか調べてみてください

関数自体が呼ばれていないなら関数を呼び出すか否かの判定文前にまたブレイクポイントを設定して各値を見てみてください

関数が呼ばれているようなら描画パラメータが変な値になっていないか確認してみてください

Visual C++以外をお使いになっているのでしたら描画している関数だけでも載せてみてください


177ポイント を手に入れた。

Name: yrao  ..入門者(2,860ポイント)   Date: 2009/07/19(日) 14:18   No:37006     
Title: Re:3D背景が表示されなくなります    
nayoさんありがとうございますm(__)m



ブレイクポイントについてですが、やり方等は一通り調べてみました。
しかし、未熟ですみません、ブレイクポイントをプログラミングのどこに付けたらいいのかが分かりません。



また、
ボムを打ったときにも背景が消えてしまいました。
自機が無敵状態になるときえてしまうようです。


152ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(394,175ポイント)   Date: 2009/07/19(日) 15:19   No:37008     
Title: Re:3D背景が表示されなくなります    
 同じ現象かどうかわかりませんが。

C言語何でも質問掲示板
ttp://www.play21.jp/board/formz.cgi?action=res&resno=35512&page=&lognum=108&id=dixq&rln=35547

試してみてはどうでしょうか。


98ポイント を手に入れた。

Name: yrao  ..入門者(2,917ポイント)   Date: 2009/07/19(日) 16:15   No:37011     
Title: Re:3D背景が表示されなくなります    
教えて頂いたURLの掲示板に書いてあったとおり、
SetDrawAreaを加えたところ、正常に描画されました!


ありがとうございますm(__)m


57ポイント を手に入れた。



Name: マルチネス  ..かけだし(1,043ポイント)   Date: 2009/07/16(木) 10:53   No:36931       
Title: 数学?    
こんにちは、いつもお世話になっています。

今回の質問は、文字列の"1234"を整数値に変換したいのですが、
1234
= 1 * 1000 + 2 * 100 + 3 * 10 + 4
=(((0 + 1) * 10 + 2) * 10 + 3) * 10 + 4 ----@

この@の展開の仕方が分かりません。
とても、馬鹿らしい質問とは思うのですが、よろしくお願いします。


2倍のポイントを手に入れた! 36ポイント を手に入れた。


Name: ねこ  ..プログラマー(27,249ポイント)   Date: 2009/07/16(木) 11:06   No:36932     
Title: Re:数学?    
char cTemp[64] = "1234"
int iTemp = atoi( cTemp );
これじゃ駄目なの?
1文字ずつ解析して変換せよ、とか条件あるのかな。


56ポイント を落としてしまった。

Name: Blue  ..中級者(11,258ポイント)   Date: 2009/07/16(木) 11:07   No:36933     
Title: Re:数学?    
"1234" を先頭から一文字ずつ見る。

1文字目
'1' → 数値に変換 → 1 ・・・@

2文字目
'2' → 数値に変換 → 2
→ @の結果と合わせる → ひと桁上なので@の結果を10倍して足す
→ @ * 10 + 2・・・A

3文字目
'3' → 数値に変換 → 3
→ Aの結果と合わせる → ひと桁上なのでAの結果を10倍して足す
→ A * 10 + 3・・・B

4文字目
'4' → 数値に変換 → 4
→ Bの結果と合わせる → ひと桁上なのでBの結果を10倍して足す
→ B * 10 + 4・・・C

Cを展開すると
((1 * 10 + 2) * 10 + 3) * 10 + 4
となる。

@が(0 + 1)になるのは
> → Xの結果と合わせる → ひと桁上なのでXの結果を10倍して足す
の X が一番最初なので 0 ということにすると
@は (0 * 10 + 1) = (0 + 1) となる。


150ポイント を手に入れた。

Name: non  ..熟練のプログラマー(55,064ポイント)   Date: 2009/07/16(木) 11:13   No:36935     
Title: Re:数学?    
昔、同じような投稿がありました。
参考になれば
ttp://www.play21.jp/board/formz.cgi?action=res&resno=28948&page=&lognum=90&id=dixq&rln=29064


41ポイント を手に入れた。

Name: SCI  ..上級者(22,919ポイント)   Date: 2009/07/19(日) 07:53   No:37003     
Title: Re:数学?    
ホーナー法による多項式計算の応用ですね。

20ポイント を手に入れた。

Name: box  ..ハッカー(142,090ポイント)   Date: 2009/07/19(日) 09:24   No:37004     
Title: Re:数学?    
> 1234
> = 1 * 1000 + 2 * 100 + 3 * 10 + 4
> =(((0 + 1) * 10 + 2) * 10 + 3) * 10 + 4 ----@

1234
= 1230 + 4
= 123 * 10 + 4
= (120 + 3) * 10 + 4
= (12 * 10 + 3) * 10 + 4
= ((10 + 2) * 10 + 3) * 10 + 4
= ((1 * 10 + 2) * 10 + 3) * 10 + 4
= (((0 + 1) * 10 + 2) * 10 + 3) * 10 + 4

これで理解できますか?


56ポイント を手に入れた。



Name: ゆみ  ..ぴよぴよ(18ポイント)   Date: 2009/07/16(木) 21:49   No:36948       
Title: VCについて質問している方がいたので・・・    
なぜかエラーが起こります。
配列周りでのものだと思うのですが
なぜでしょうか・・・。


18ポイント を手に入れた。


Name: バグ  ..ハッカー(162,378ポイント)   Date: 2009/07/17(金) 00:17   No:36955     
Title: Re:VCについて質問している方がいたので・・・    
Initialize関数の2行目に以下の記述を追加してください。


for (int i = 0; i < this->textLabel->Length; ++i)
{
this->textLabel[i] = gcnew System::Windows::Forms::Label();
}


っていうか、どうして名前を毎回変えるんですか?
ソース見たらバレバレなのに…

何度も質問したりするのは、別に恥ずかしい事じゃないと思うんですけどねぇ…。

ちなみに、この掲示板では名前を変えるのは規則違反だったような…
それから、名前を変えても管理人さんにはバレバレですので。


163ポイント を手に入れた。

Name: ゆみ  ..ぴよぴよ(348ポイント)   Date: 2009/07/19(日) 00:43   No:37000     
Title: Re:VCについて質問している方がいたので・・・    
バグ様
レス遅くなり申し訳ありません。
名前変えてすみません・・・

毎回、質問ばかりで丸投げ?となっているので
答えていただけないかと思い変えておりました。

レスが毎回遅いのも自分なりに調べているのですが
バグが解消されません。

今回も修正してエラーは出なくなったのですが
Label自体の表示がされないのとキー情報を取得しません・・・。

何度も申し訳ないのですが教えていただけますと幸いです。


2倍のポイントを手に入れた! 330ポイント を手に入れた。

Name: pooka [URL]  ..中級者(10,724ポイント)   Date: 2009/07/19(日) 01:42   No:37002     
Title: Re:VCについて質問している方がいたので・・・    
>Label自体の表示がされない
コントロールを追加していないからだと思います。
this->Controls->Add(this->textLabel[1]);
これをInitialize関数の最後(でいいのかな?)に追加すれば表示されると思います。

>キー情報を取得しません
プロパティウィンドウで、Form1のKeyPreviewをtrueにすればいけると思います。


129ポイント を落としてしまった。



Name: チルチル  ..プログラマー(31,192ポイント)   Date: 2009/07/16(木) 18:04   No:36937       
Title: 四角形と点の当たり判定    
DXライブラリでゲームを製作中なのですが
四角形と点との当たり判定を求める処理が思い付きません

何か良い式や処理は無いでしょうか?

四角形は斜めもある長方形とします

龍神録プログラミングの館の「レーザーを作ってみよう」の2番目の処理が使えそうなのですが
AベクトルとBベクトルが何を指すのもわかりません・・


102ポイント を手に入れた。


Name: non  ..熟練のプログラマー(55,244ポイント)   Date: 2009/07/16(木) 18:49   No:36938     
Title: Re:四角形と点の当たり判定    
>龍神録プログラミングの館の「レーザーを作ってみよう」の2番目の処理が使えそうなのですが

使えそうですね。

Aベクトルは 「レーザーを作ってみよう」の2番目の図では、
b点からa点へ向かうベクトルで、Bベクトルはb点からr点へ向かうベクトルです。

チルチルさんの学年等がわからないと、どこまで説明して良いかわかりません。

なお、外積の式
AXB=Ax*By+Ay*Bx と書いてありますが、
AXB=Ax*By-Ay*Bx の間違いだと思います。
(プログラムではそうなっているので)


180ポイント を手に入れた。

Name: GPGA  ..熟練のプログラマー(64,552ポイント)   Date: 2009/07/16(木) 19:10   No:36939     
Title: Re:四角形と点の当たり判定    
以下のページの一番下にアルゴリズムがあります。
http://marupeke296.com/COL_2D_No4_SquareToSquare.html

プログラムにすると以下のようになります。

struct Point {
int x, y;
};


/*!
* @brief 変形矩形と点の辺り判定
*/
bool Hit(Point rect[4], Point point) {
int cnt = 0;
for (int i = 0; i < 4; ++i) {
const int x1 = rect[(i + 1) % 4].x - rect[i].x;
const int y1 = rect[(i + 1) % 4].y - rect[i].y;
const int x2 = point.x - rect[i].x;
const int y2 = point.y - rect[i].y;
if (x1 * y2 - x2 * y1 < 0) {
++cnt;
} else {
--cnt;
}
}
return cnt == 4 || cnt == -4;
}
 


253ポイント を手に入れた。

Name: チルチル  ..プログラマー(31,246ポイント)   Date: 2009/07/16(木) 19:33   No:36940     
Title: Re:四角形と点の当たり判定    
え〜と高校2年生でベクトルは合成ぐらいしかできません・・

文字式とかで説明してくれるとありがたいです


2倍のポイントを手に入れた! 54ポイント を手に入れた。

Name: ねこ  ..プログラマー(27,365ポイント)   Date: 2009/07/16(木) 20:06   No:36941     
Title: Re:四角形と点の当たり判定    
GPGAさんのレスをスルーしてるのは何故ですか?外積で計算するので問題無いと思うのですが・・・

数学的な意味で分からないのなら星の数ほどある数学系サイト見た方が図と詳しい説明もあって理解しやすいと思うよ。
sin,cosなら分かると思うけど、知らない人に図もなく文字だけで説明しろって言われたら厳しいでしょ?

答えだけ欲しいのならGPGAさんの関数を拝借するのが一番早いけどね。


116ポイント を手に入れた。

Name: チルチル  ..プログラマー(31,348ポイント)   Date: 2009/07/16(木) 20:32   No:36942     
Title: Re:四角形と点の当たり判定    
あ〜別にスルーしてるわけではないです・・

やはり理解しないで実装すると問題が出そうなので・・

文字だけと言うか・・変数名を文字に置き換えてくれると意味が分かりやすいかも・・

数学的もそうなんですけど・・プログラムで再現する方も知りたいので・・


102ポイント を手に入れた。

Name: non  ..熟練のプログラマー(55,403ポイント)   Date: 2009/07/16(木) 21:11   No:36944     
Title: Re:四角形と点の当たり判定    
GPGAさんの紹介されている方法の方が簡単なようです。
簡単なプログラムもGPGAさんから載せてあるし、外積は高校で習わないからわからないと
思いますが、このプログラムだけ使わせてもらったらどうでしょうか。
どうしても、龍神録の方法を理解したいなら説明しますが、どっちにしても
内積と外積の式は公式だと思ってもらうよりないとは思います。


159ポイント を手に入れた。

Name: ねこ  ..プログラマー(27,751ポイント)   Date: 2009/07/16(木) 21:40   No:36946     
Title: Re:四角形と点の当たり判定    
>チルチルさん
数学とプログラムをくっつけるのが難しいのは分かるんだけど、それならもうちょっと具体的に言って欲しいな。
「この変数」「この1行」「この計算」、問題点のフォーカスを絞らないから問題解決に遠回りしてるんですよ。

数学的に分からなくてもプログラムとアルゴリズムの説明ページは出てるんだから、そこから自分で解析するのも大事です。
そうしないともっと高度な演算や物理計算が必要になった時手が付けられなくなっちゃいますよ。
複雑な内容は解説ページのURL張るしかなくなりますからね(レスじゃ説明しきれない)


2倍のポイントを手に入れた! 386ポイント を手に入れた。

Name: チルチル  ..プログラマー(31,533ポイント)   Date: 2009/07/16(木) 22:08   No:36949     
Title: Re:四角形と点の当たり判定    
ええ、仰る通りなんですが
やはり当たり判定の処理は自分で作らないと後々まずい事になりそうなので
GPGAさんのリンクを元に処理を考えてみます

まず(vx2-vx1)*(yp-vy1) - (xp-vx1)*(vy2-vy1)が1つでもプラスなら当たっていないと言う事ですよね・・
つまりこの処理を4回行ってプラスになったらやめる、最後まで行われたら当たっていると・・

そして(vx2-vx1)*(yp-vy1) - (xp-vx1)*(vy2-vy1)の意味は

(辺の終点のX座標-辺の始点のX座標)*(点のY座標-辺の始点のY座標) - (辺の終点のY座標-辺の始点のY座標)*(点のX座標-辺の始点のX座標)

と言う解釈で合っているでしょうか?
辺が時計回りに伸びている場合ですよね・・
何か個人的にしっくり来なかったので後半を逆にしました


185ポイント を手に入れた。

Name: ねこ  ..プログラマー(28,158ポイント)   Date: 2009/07/16(木) 22:52   No:36950     
Title: Re:四角形と点の当たり判定    
「全部右」か「全部左」か、の二択です。点の配列が時計回りと半時計周りで方向が逆転するからです。

 →
↑・↓
 ←

 ←
↓・↑
 →

各矢印の方を「目線」として、点がどっちにあるかを考えてるのです。

<そして(vx2-vx1)*(yp-vy1) - (xp-vx1)*(vy2-vy1)の意味は
<(辺の終点のX座標-辺の始点のX座標)*(点のY座標-辺の始点のY座標) - (辺の終点のY座標-辺の始点のY座標)*(点のX座標-辺の始点のX座標)

外積の公式の話ですよね。これはもう「そうですよ」としか答えられないです。
参考ページにも「v1の始点を(vx1, vy1)、終点(vx2, vy2)をとし、調べたい点(正方形Bの頂点)をP(xp, yp)」って説明されてますよね。

<やはり当たり判定の処理は自分で作らないと後々まずい事になりそうなので
多分自分で作った方がまずい事になりますよ・・・先人の知識は様々な方の検証の後に定義されてるものなのですから。完全に扱えるようになるまでは無駄にバグで時間に振り回されるより知恵に頼った方が成長も効率も良いと思います、まぁそれでもやりたいなら止めはしませんが。


407ポイント を手に入れた。

Name: チルチル  ..プログラマー(31,629ポイント)   Date: 2009/07/16(木) 23:17   No:36952     
Title: Re:四角形と点の当たり判定    
え〜とこの場合は全部右ですね・・

できれば先人の知恵に頼りたいんですが
私の場合は、組み込む時に間違える可能性が高いのと
コードの構造が個性的で他の人の処理と合わないと言う問題があるので
自分で組むしかないです・・

あと自分で作った処理の方が応用も利くし愛着が湧くので・・

とりあえずコードを組んでみるので少々お待ちください・・


96ポイント を手に入れた。

Name: チルチル  ..プログラマー(31,740ポイント)   Date: 2009/07/16(木) 23:33   No:36953     
Title: Re:四角形と点の当たり判定    
ん?そういえばリンクに「正方形」って描いてありますけど長方形でも大丈夫なんでしょうか?
まあ最後に「時計回りのベクトルで構成されたすべての平面について成り立ちます」と書いてあるから
大丈夫だとは思いますが、と言う事は台形とか三角形でも使えるんでしょうか?
使えるなら後々応用できそうなのですが・・
とりあえず時計回りだから凸レンズとか凹レンズはダメそうですね・・


111ポイント を手に入れた。

Name: Libra  ..中級者(9,113ポイント)   Date: 2009/07/16(木) 23:42   No:36954     
Title: Re:四角形と点の当たり判定    
ゲームの処理ということで、自分であれば、

・正方形(or長方形)の中心座標
・正方形(or長方形)の表示角度
・縦の長さ、横の長さ

を使って、当たり判定を行う関数内で4つの頂点位置を出してから、計算しますね。
こうすれば、頂点座標4つの右回り、左回りを考えなくて済みます。


> 私の場合は、組み込む時に間違える可能性が高いのと
> コードの構造が個性的で他の人の処理と合わないと言う問題があるので
> 自分で組むしかないです・・
> あと自分で作った処理の方が応用も利くし愛着が湧くので・・
> とりあえずコードを組んでみるので少々お待ちください・・

他の人がソースを見るということを意識してプログラムを書いてはどうでしょうか?


137ポイント を手に入れた。

Name: チルチル  ..プログラマー(31,461ポイント)   Date: 2009/07/17(金) 00:23   No:36956     
Title: Re:四角形と点の当たり判定    
>を使って、当たり判定を行う関数内で4つの頂点位置を出してから、計算しますね。
あ〜確かに私のコードで判定を行う場合も
与えられている情報は
・正方形(or長方形)の中心座標
・正方形(or長方形)の表示角度
・縦の長さ、横の長さ
だけだと思うので、それで行けると思います

>こうすれば、頂点座標4つの右回り、左回りを考えなくて済みます。
ん〜これはよくわからないですね・・
頂点座標を時計回りの順番で計算して行くと言う事でしょうか?

>他の人がソースを見るということを意識してプログラムを書いてはどうでしょうか?
できればそうしたいんですが、私の実力では後で自分が見てギリギリ理解できるコードが精一杯です・・
あと私は神経質なので変数名,関数名もスペルを略さないので全体的に式が長くなっています・・
略した場合は後で自分が見て理解できないと言う問題も出てきますが・・


279ポイント を落としてしまった。

Name: ねこ  ..プログラマー(28,249ポイント)   Date: 2009/07/17(金) 00:40   No:36958     
Title: Re:四角形と点の当たり判定    
<矩形計算
龍神録の例やベクトルの例は応用出来るからよく使われているだけで単純な矩形の内部判定ならいくらでもありますよ。
例えば調べたい座標と矩形の中心を結ぶ線が矩形の四辺のどれかと交差しているか、とかね。

<凹凸
ベクトルの例なら応用すりゃ出来るよ。テンキーの17593を結ぶような形なら1793の矩形を判定して、矩形内部にあったら759の三角形で判定して、三角形内部だったら範囲外とかね。

<あと私は神経質なので変数名,関数名もスペルを略さないので全体的に式が長くなっています・・
これは全然構わないと思うよ、ていうか僕も長い方だし。
略語は例えばExtraをEx、PointをPntとか後から見ようがいつでも分かるものをするのが理想だと考えてます。
主処理(MainScript)をms、WindowWidthをwwとか略されてるとナニコレ?って思う派です。


91ポイント を手に入れた。

Name: チルチル  ..プログラマー(31,619ポイント)   Date: 2009/07/17(金) 01:03   No:36959     
Title: Re:四角形と点の当たり判定    
スペルが長いのもアリなんでしょうかね〜
長いと言えば一般的には関数の引数は少ない方が良いらしいですが
私は分けると書き忘れる可能性があるので
1つの関数にできるだけ詰め込む努力を延々としています
これは他の人が見て見やすいコードは難しいかもしれませんね・・
自分にとって見やすいコードと一般的に見やすいコードが違うようです・・


158ポイント を手に入れた。

Name: lbfuvab  ..上級者(21,269ポイント)   Date: 2009/07/17(金) 01:50   No:36960     
Title: Re:四角形と点の当たり判定    
長方形が細長ければ、
直線と点の距離と長方形の中心からの距離でも良い近似になりそうですね。


38ポイント を手に入れた。

Name: チルチル  ..プログラマー(31,686ポイント)   Date: 2009/07/17(金) 06:57   No:36961     
Title: Re:四角形と点の当たり判定    
あ〜それも良いかもしれませんね
でも今回は近似だとまずいんですよね・・
想定している処理だと辺の長さが1ピクセル以下になる場合もあるんですが大丈夫かな・・


67ポイント を手に入れた。

Name: チルチル  ..プログラマー(31,921ポイント)   Date: 2009/07/18(土) 22:08   No:36998 解決!     
Title: Re:四角形と点の当たり判定    
コードを作ってみました
マウスポインタが四角形の中に入ると「当たっています」と表示されます
左クリックで頂点を動かせます
使う状況は未定だから効率化は今は良いかな・・
ちなみに「時計回りのベクトルで構成された平面」と言うのはこの場合「頂点で辺が全部右に曲がっている」って事ですよね・・

#include "DxLib.h"

typedef struct{
int x;
int y; //座標
int WheelRotVol;//ホイールの回転量
unsigned int Button[8]; //ボタンの押した状態
}Mouse_t;

Mouse_t Mouse;

int GetHitMouseStateAll_2(Mouse_t *Nezumi){
if(GetMousePoint( &Nezumi->x, &Nezumi->y ) == -1){ //マウスの位置取得
return -1;
}
int MouseInput=GetMouseInput(); //マウスの押した状態取得
for(int i=0; i<8; i++){ //マウスのキーは最大8個まで確認出来る
if( (MouseInput & 1<<i ) != 0 ) Nezumi->Button[i]++; //押されていたらカウントアップ
else Nezumi->Button[i] = 0; //押されてなかったら0
}
Nezumi->WheelRotVol = GetMouseWheelRotVol() ; //ホイール回転量取得
return 0;
}

int Key[256];

int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key[i]==1) GetHitKeyStateAll_InputKey[i]++;
else GetHitKeyStateAll_InputKey[i]=0;
}
return 0;
}

int count=0;

void wait_fanc(){
int term;
static int t=0;
term = GetNowCount()-t;
if(16-term>0)
Sleep(16-term);
t=GetNowCount();
return;
}

void fps(){
int i;
static int t=0,ave=0,f[60];

f[count%60]=GetNowCount()-t;
t=GetNowCount();
if(count%60==59){
ave=0;
for(i=0;i<60;i++)
ave+=f[i];
ave/=60;
}
if(ave!=0){
DrawFormatString(0, 0,GetColor(255,255,255),"%.1fFPS",1000.0/(double)ave);
DrawFormatString(0,20,GetColor(255,255,255),"%dms" ,ave);
}
return;
}

float X[4]={100,300,300,100},Y[4]={100,100,300,300};

char H,V;

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);SetOutApplicationLogValidFlag( FALSE );
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理   ↑画面をクリア     ↑入力状態を保存       ↑ESCが押されていない

GetHitMouseStateAll_2(&Mouse); //マウスの入力状態取得

if( Mouse.Button[0]==1 )X[V]=Mouse.x,Y[V]=Mouse.y,++V,V-=4*(V==4);

for(int i=0;i<4;i++)DrawLine( X[i] , Y[i] , X[(i+1)%4] , Y[(i+1)%4] , GetColor( 255 , 255 , 255 ) );

for(int i=0;i<4;i++){

if( (X[(i+1)%4]-X[i])*(Mouse.y-Y[i])-(Y[(i+1)%4]-Y[i])*(Mouse.x-X[i])>0 )H=1;

else{H=0;break;}

}

if( H )DrawString( 100 , 0 , "当たっています" , GetColor( 255 , 255 , 255 ) );

fps();
count++;
ScreenFlip();
wait_fanc();

}

DxLib_End();
return 0;

}




235ポイント を手に入れた。



Name: vion  ..ぴよぴよ(23ポイント)   Date: 2009/07/17(金) 19:28   No:36967       
Title: Win32API オーナードローボタンについて    
こんにちは。

オーナードローボタンについて質問なんですが
CreateWindowで第一引数を"BUTTON"にしプッシュボタンを作ろうとします。

その際、プッシュボタンをオーナードローで表示したく、しかもアニメーション(例えば、ボタンが点滅したり)で実現したいと思っています。
その場合のアプローチの仕方を教えてもらえないでしょうか。

いくつかやってみて疑問も出たので同時に質問させてください。
親ウィンドウのWM_PAINTを受け取る際にBeginPaintでボタンウィンドウのハンドルを用い、
デバイスコンテキストハンドルを取得してプッシュボタンの描画を実現しようとすると、
CPU負荷が極端に掛かるのはどうしてなんですか?

また、ボタンウィンドウ用にウィンドウクラスを登録し、プロシージャを独自に実装すれば出来るかと思いましたが、
ボタンウィンドウではプロシージャを持たせることが出来ないんですか?


23ポイント を手に入れた。


Name: toyo  ..プログラマー(39,638ポイント)   Date: 2009/07/18(土) 10:42   No:36981     
Title: Re:Win32API オーナードローボタンについて    
アニメーションさせるならオーナードローだけでは無理ですね
タイマーイベントで変化させればいいでしょう
コントロールのプロシージャをフックするのをサブクラス化といいます
猫でもわかるを参考に作ってみました
http://www.kumei.ne.jp/c_lang/sdk/sdk_36.htm

#include <windows.h>
#define ID_BUTTON1 1000
HWND hBWnd; //標準コントロールのHWND
WNDPROC Org_BWnd; //オリジナルプロシージャのアドレス
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK MySubProc(HWND, UINT, WPARAM, LPARAM);
BOOL InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
LPCTSTR szClassName = TEXT("subcl01"); //ウィンドウクラス
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
MSG msg;
if (!hPrevInst) {
if (!InitApp(hCurInst))
return FALSE;
}
if (!InitInstance(hCurInst, nCmdShow)) {
return FALSE;
}
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//ウィンドウ・クラスの登録
BOOL InitApp(HINSTANCE hInst)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc; //プロシージャ名
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst; //インスタンス
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL; //メニュー名
wc.lpszClassName = szClassName;
return (RegisterClass(&wc));
}
//ウィンドウの生成
BOOL InitInstance(HINSTANCE hInst, int nCmdShow)
{
HWND hWnd;
hWnd = CreateWindow(szClassName,
TEXT("猫でもわかるサブクラス化"), //タイトルバーにこの名前が表示されます
WS_OVERLAPPED | WS_SYSMENU, //ウィンドウの種類
CW_USEDEFAULT, //X座標
CW_USEDEFAULT, //Y座標
250, //幅
120, //高さ
NULL, //親ウィンドウのハンドル、親を作るときはNULL
NULL, //メニューハンドル、クラスメニューを使うときはNULL
hInst, //インスタンスハンドル
NULL);
if (!hWnd)
return FALSE;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
//ウィンドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
PAINTSTRUCT ps;
HDC hdc;
HINSTANCE hInst;
LPCTSTR color[] = { TEXT("赤 "), TEXT("緑 ")};
static click;
switch (msg) {
case WM_CREATE:
hInst = ((LPCREATESTRUCT)lp)->hInstance;
hBWnd = CreateWindow(TEXT("BUTTON"),
NULL,
WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,
10, 50,
100, 30,
hWnd,
(HMENU)ID_BUTTON1,
hInst,
NULL);
//ウィンドウのサブクラス化
Org_BWnd = (WNDPROC)GetWindowLong(hBWnd, GWL_WNDPROC);
SetWindowLong(hBWnd, GWL_WNDPROC, (LONG)MySubProc);
SetTimer(hBWnd, 1, 10, NULL);
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 10, 10, color[click], 2);
EndPaint(hWnd, &ps);
break;
case WM_COMMAND:
switch (LOWORD(wp)) {
case ID_BUTTON1:
click = click ? 0 : 1;
InvalidateRect(hWnd, NULL, FALSE);
break;
default:
return(DefWindowProc(hWnd, msg, wp,lp));
}
break;
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
//一応終了時にサブクラス化の解除
//アプリケーションが終了してしまうので必要ないといえばない
SetWindowLong(hBWnd, GWL_WNDPROC, (LONG)Org_BWnd);
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, msg, wp, lp));
}
return 0L;
}
//コントロールのサブクラス化
LRESULT CALLBACK MySubProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
HDC hDC;
HBRUSH hBrush, hOldBrush;
static BYTE color;
static int lclick;
static int sign = 2;
switch (msg) {
case WM_TIMER:
hDC = GetDC(hWnd);
if (lclick) {
hBrush = CreateSolidBrush(RGB(0, color, 0));
}
else {
hBrush = CreateSolidBrush(RGB(color, 0, 0));
}
color += sign;
if (color == 254) {
sign = -2;
}
if (color == 0) {
sign = 2;
}
hOldBrush = SelectObject(hDC, hBrush);
Rectangle(hDC, 0, 0, 100, 30);
SelectObject(hDC, hOldBrush);
DeleteObject(hBrush);
ReleaseDC(hWnd, hDC);
return 0; //メッセージの処理をしたら0を返す
case WM_LBUTTONUP:
lclick = lclick ? 0 : 1;
break; //親にクリックメッセージを渡すため元のプロシージャへ
default:
break;
}
//自分で処理しないものは元のプロシージャにやってもらう
return (CallWindowProc(Org_BWnd, hWnd, msg, wp, lp));
}


1,781ポイント を手に入れた。

Name: vion  ..ぴよぴよ(172ポイント)   Date: 2009/07/18(土) 18:37   No:36997 解決!     
Title: Re:Win32API オーナードローボタンについて    
>コントロールのプロシージャをフックするのをサブクラス化といいます

なるほどー!!
キーワードを頂いただけでなく実際に組んでいただき感謝感激です。
おかげでコードを眺めながら具体的に検討できます。

理解し、自分なりにアレンジするまで少し時間がかかりそうなので
その際に疑問が出れば、また次回質問することにします。

toyoさん、ありがとうございました!!


149ポイント を手に入れた。



Name: ひよこ  ..熟練のプログラマー(47,014ポイント)   Date: 2009/07/18(土) 09:16   No:36980       
Title: ブロックでお絵かき    
ブロックでお絵かきできるゲームを作ってきました。
DXライブラリがコンパイルできるところで
コンパイルして遊んでください。
感想を待ってます。


39ポイント を手に入れた。


Name: kazuoni [URL]  ..比類無きプログラマー(94,112ポイント)   Date: 2009/07/18(土) 11:16   No:36982     
Title: Re:ブロックでお絵かき    
えーっと、いまいち目的が分かりませんが・・・
フィールド作成ツールの序章かな?っと勝手に認識・・・^^;

とりあえずの不具合は、
・右に動くときだけ、キャラが点滅する
・枠外に行けてしまう(枠外ならば、フィールドを動かすべきかと)

要望は
・マウスに対応
・ctrl+α機能

などなど・・・挙げるとキリがありませんが、
もっと工夫できる点はたくさんありますので、
ぜひ、発展させていってください^^

#追記
>右に動くときだけ、キャラが点滅する
どのような条件の時にかが分かりませんでした^^;
とりあえず報告だけを。。


112ポイント を手に入れた。

Name: ひよこ  ..熟練のプログラマー(47,153ポイント)   Date: 2009/07/18(土) 11:35   No:36984     
Title: Re:ブロックでお絵かき    
kazuoniさん 遊んでくださりありがとうございます。
フィールド作成ツールにもなりますね。
右に動くときだけ、キャラが点滅する
>>自分のところではそんな風には見えませんでした。

ぜひ、発展させていってください^^
>>すこし発展させます。

あるゲームを真似して作ってましたら、こんなのはどうかと思ったので作ってみました。


139ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(94,255ポイント)   Date: 2009/07/18(土) 11:48   No:36986     
Title: Re:ブロックでお絵かき    
>右に動くときだけ、キャラが点滅する
ちょっとまだ微妙ですけど、
やはり、枠外に移動できることに原因がある気がします。
そのおかげで描写に支障がきたしているのかと。
枠上にでて色描写して帰ってくると、
・キャラが点滅するときがある
・特定の色が塗れなくなる

などより、データが壊れているような気がします。
(hantei[ch.y/32][ch.x/32]のあたりが怪しい)


143ポイント を手に入れた。

Name: ひよこ  ..熟練のプログラマー(47,189ポイント)   Date: 2009/07/18(土) 12:19   No:36988     
Title: Re:ブロックでお絵かき    
枠外とマウスに対応?しました。(また変なことが起きそうな・・・
感想をください。


36ポイント を手に入れた。

Name: kazuoni [URL]  ..比類無きプログラマー(94,291ポイント)   Date: 2009/07/18(土) 12:30   No:36990     
Title: Re:ブロックでお絵かき    
まず自分でいろいろなパターンを試したほうがよいですよ。
画面内でクリックしたまま、外へドラッグすると先ほどのような不具合が起きます。
(フルスクリーンの仕様ならよいのですが・・・。)


36ポイント を手に入れた。

Name: ひよこ  ..熟練のプログラマー(47,120ポイント)   Date: 2009/07/18(土) 12:47   No:36991     
Title: Re:ブロックでお絵かき    
基本フルスクリーンとします。
画面内でクリックしたまま、外へドラッグすると先ほどのような不具合が起きます。
>>試してみましたがすごいことになりましたね。原因もわかりません。
いろいろとやって見ているのですが直りませんでした。


69ポイント を落としてしまった。

Name: kazuoni [URL]  ..比類無きプログラマー(94,342ポイント)   Date: 2009/07/18(土) 13:00   No:36992     
Title: Re:ブロックでお絵かき    
とりあえず、マウス監査のところでマウスの座標も求めているところで、
座標がウィンドウ範囲外に出ていたら、補正するなどで対処ができるかと思います。
もしくは、クリックがカウントされ、かつ、ウィンドウの範囲外ならば処理をしないなど。

あと、マウスによる描写、キャラによる描写の優先度があいまいです。
どちらかを優先的に処理するということは考えたほうがよいかと思います。

#フルスクリーン仕様ならもうこれ以上の機能追加はいらないので、↑は無視してください^^;
(優先度はいるかも・・・)


51ポイント を手に入れた。

Name: ひよこ  ..熟練のプログラマー(47,141ポイント)   Date: 2009/07/18(土) 14:16   No:36994 解決!     
Title: Re:ブロックでお絵かき    
フルスクリーン仕様にします。
kazuoniさん、いろいろありがとうございました。


21ポイント を手に入れた。



Name: 狼太郎  ..かけだし(2,212ポイント)   Date: 2009/07/18(土) 11:35   No:36983       
Title: 素朴な疑問    
たとえば
フリーゲームで使用している画像を見てみると、それぞれ敵キャラや弾など、大きさがまちまちな物が一枚の画像に纏められているのをよく見ます。
あれは、分割して読み込む画像ですよね?
DXライブラリでも
画像を分割して読み込むはできますが・・

すべて同じ大きさにしか分割できないのでしょうか?
ちょっと気になったので質問しました。


145ポイント を落としてしまった。


Name: nayo  ..中級者(11,425ポイント)   Date: 2009/07/18(土) 11:47   No:36985     
Title: Re:素朴な疑問    
テクスチャの描画部分を指定して描画しているのではないでしょうか

DXライブラリならDrawRectGraphという関数があります
また、このほかにもDXライブラリでそれっぽいことができる関数としてはDerivationGraphなどもあるようです


89ポイント を手に入れた。

Name: 狼太郎  ..かけだし(2,234ポイント)   Date: 2009/07/18(土) 12:10   No:36987 解決!     
Title: Re:素朴な疑問    
回答ありがとうございました!
こんな関数があったんですね・・


22ポイント を手に入れた。



Name: rajan  ..ぴよぴよ(53ポイント)   Date: 2009/07/17(金) 21:21   No:36969       
Title: 無題    
c 言語 で 一ヶ月の 給料 計算 する プログラム 教えて ください

28ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(108,074ポイント)   Date: 2009/07/17(金) 21:46   No:36971     
Title: Re:無題    
給与体系と基本給はどうなっていますか?
給与計算の場合、普通は健康保険料や厚生年金保険料などの計算も必要かと思いますが、その辺はどうなっていますか?
必要な場合、40歳以上かどうかで介護保険料の有無が異なります。計算対象となる人の年齢も補足してください。
あと、住民税の扱いをどうするのかも補足をお願いします。


98ポイント を手に入れた。

Name: non  ..熟練のプログラマー(55,453ポイント)   Date: 2009/07/18(土) 08:38   No:36979     
Title: Re:無題    
rajanさんて、過去2回ほど投稿されているけど、目的は何だろう?


18ポイント を手に入れた。



Name: なすがに  ..入門者(3,306ポイント)   Date: 2009/07/15(水) 23:51   No:36922       
Title: C++にて、ファイルのサムネイルを設定するには?    
お世話になっております。

先日よりここでIPropertyStorageに関する質問をさせていただいております。
http://www.play21.jp/board/formz.cgi?action=res&resno=36605&page=&id=dixq&rln=36675

VC++で IPropertyStorage を使い、ファイルのプロパティの概要にある項目を
書き換えるプログラムを作っています。

IPropertyStorageで使用されているPropIdl.hの中で、PIDSI_THUMBNAILという
定数を見つけました。ファイルのサムネイルを設定できるIDだと思うのですが、
使用方法が分かりません。タイトルや表題、作成者などは文字列を書き込めば
設定できると直感的に理解できるのですが、サムネイルの場合、何をどうやって
設定するのかがわかりません。画像ファイルのパスでしょうか、バイナリデータ
でしょうか。。。

グーグルで検索をしてみましたが、参考になりそうなページが思うように
見つかりませんでした。しかし、サムネイルを設定できるとすれば、
ぜひやってみたいと思っています。

使用方法やサンプルコードなど、ご教授いただければ幸いです。
よろしくお願いいたします。

(Windows XP SP3、VC++ 2008 EE)


391ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(393,797ポイント)   Date: 2009/07/16(木) 01:22   No:36925     
Title: Re:C++にて、ファイルのサムネイルを設定するには?    
 PIDSI_THUMBNAILが定義されているヘッダのところを見れば、タイプが書いてあるはずです。

 PIDSI_TITLEなら VT_LPSTR、PIDSI_EDITTIMEなら VT_FILETIMEとか。
(この値は Readを行ったあとの PROPVARIANT構造体の vt値にも書き込まれています)

 じゃぁ、VT_LPSTRは何かを再びヘッダを調べると、"null terminated string"という説明が、
見つかります。
 つまり、PIDSI_TITLEは NULL終端の文字列であることがわかります。

 これと同じ方法で PIDSI_THUMBNAILについて調べてみてください。

 あとはその VT_XXXXのタイプ定義と説明文で Googleで検索すると
ビンゴなページを発見できるはずです。


 頑張って調べてみてください。


264ポイント を手に入れた。

Name: なすがに  ..入門者(3,342ポイント)   Date: 2009/07/18(土) 01:07   No:36976 解決!     
Title: Re:C++にて、ファイルのサムネイルを設定するには?    
返信が遅れ大変申し訳ないです。
アドバイスをいただいた通り、調べているところです。

調べ方が分からず滞っていたので。。。

理解しづらそうな所にたどり着いてしまいましたが、
もう少し自分で調べて、いろいろ試してみようと思います。

また行き詰ったら、質問させていただきます。
次の質問と時間が空くかもしれないので、ここは解決済みとさせていただきます。

ありがとうございました。


36ポイント を手に入れた。



Name: まっさ  ..ぴよぴよ(498ポイント)   Date: 2009/07/17(金) 20:30   No:36968       
Title: for文のことで    
「名前を順番に入力し、最後に全員の名前を表示する」というプログラムを作ろうとしています。
プログラムコード↓


#include <stdio.h>

int main(void){

char name[10][128]; /* 名前を格納する配列 */
int num = 0; /* メンバーの人数 */
int cnt = 0; /* ループ用の変数 */

printf("メンバーの人数は何名ですか?\n");
scanf_s("%d", &num);


for(cnt = 0; cnt <= num-1; cnt++){
printf("%d番目のメンバーのお名前は?\n", cnt+1);
gets(name[cnt]);
}

printf("\n\n");

for(cnt = 0; cnt <= num-1; cnt++){
printf("%d番:%s\n", cnt+1, name[cnt]);
}

return 0;

}


コンパイル時にはエラーは表示されませんでしたが、実際に動かしてみたところ、
1回目に名前を入力するところだけ飛ばされてしまいます。
こんな感じになります↓


C:\Program Files\Microsoft Visual Studio 9.0\VC>test2
メンバーの人数は何名ですか?
5
1番目のメンバーのお名前は?
2番目のメンバーのお名前は?
yamada
3番目のメンバーのお名前は?
yamamoto
4番目のメンバーのお名前は?
yamasita
5番目のメンバーのお名前は?
yamane


1番:
2番:yamada
3番:yamamoto
4番:yamasita
5番:yamane


コンパイルは「VC++ 2008EE」のコマンドプロンプトで行っており、
実行ファイルもコマンドプロンプトで動かしています。

C言語は大学(情報系ではない)の授業でかじった程度なので初心者です。
「実行ファイルを動かす」などの表現も正しいか分からず使っています。
注釈の入れ方もよく分かっていないので、分かりずらいと思います。
質問内容以外のこともご指導いただけたらありがたいです。


498ポイント を手に入れた。


Name: sizuma [URL]  ..初心者(7,947ポイント)   Date: 2009/07/17(金) 21:22   No:36970     
Title: Re:for文のことで    
scanf関数はエンターキーを押すところまでのキーを読み取るので、最初のscanf関数で
5(エンター)  ←読み取るためにデータをためておくところ(バッファ)
という風にバッファに読み込まれます。
この中で、
scanf_s("%d", &num)
として、十進数でnumに受け取ると、バッファの中身は
(エンター)
だけが残っています。

次にgets関数を使うと、バッファにデータが残っているので、飛ばされてしまうんですね。
これが、%dで10進数を読み取る場合は大丈夫なんですけど

対処法は、僕は文字列も受け取る、ってしたかな?
バッファの中を空にする関数もあると思うんですが。
僕も勉強中なんでわからないです^^;

一応scanf_s関数はscanf関数と同じ仕様はだとは思うんですが、違ったらごめんなさい。


>実行ファイルを動かす
別にいいと思います
僕は実行するって言いますね。

>注釈
シンプルなプログラムだし、変数名も分かりやすいんでコメントなくても大丈夫なくらいだと思います
ループの変数は僕はi,j,kでしますね。

<pre>
ここにプログラム
</pre>
っていう風にしないと、インデントされないんで気をつけてくださいー


2倍のポイントを手に入れた! 620ポイント を手に入れた。

Name: sizuma [URL]  ..初心者(8,021ポイント)   Date: 2009/07/17(金) 23:08   No:36973     
Title: Re:for文のことで    
訂正
>僕は文字列も受け取るってことにしたかな?

今書いてみたら
scanf("%d%s",&num,temp)ってするとおかしくなりました
scanf("%d%c",&num,&temp)ってするか、

scanf("%d",&num);
getchar();

ですかね。僕が思いつく限り


74ポイント を手に入れた。

Name: lbfuvab  ..上級者(21,310ポイント)   Date: 2009/07/17(金) 23:56   No:36974     
Title: Re:for文のことで    
1 rewindやfflushでバッファクリア(環境依存)
2 改行付きの文字列で受け取り変換
3 scanfの受け取り方を工夫(ググれば出てきます)

と言ったところですね。


41ポイント を手に入れた。

Name: まっさ  ..ぴよぴよ(439ポイント)   Date: 2009/07/17(金) 23:59   No:36975 解決!     
Title: 解決しました。    
sizumaさん、回答ありがとうございます。
ご指摘通りに変数「temp」を用意して、実行するとうまくいきました。
エンターのことも注意する必要があったとは、思いませんでした。

次はプログラムコードのインデント、気を付けます。

lbfuvabさん、回答ありがとうございます。
今回はscanfを工夫してやってみました。
教えていただいた他の方法もやってみます。





59ポイント を落としてしまった。



Name: アヤ  ..ぴよぴよ(37ポイント)   Date: 2009/07/15(水) 19:24   No:36906       
Title: シフト演算についての質問です。    
シフト演算を用いて「□」と「■」を以下のように表示せよという問題が出たのですが
分からなくて困っています。

どなたかお知恵を貸していただけないでしょうか?

□□□□□□□□■
□□□□□□□■
□□□□□□■
□□□□□■
□□□□■
□□□■
□□■
□■

□■
□□■
□□□■
□□□□■
□□□□□■
□□□□□□■
□□□□□□□■
□□□□□□□□■


37ポイント を手に入れた。


Name: conio [URL]  ..プログラマー(34,851ポイント)   Date: 2009/07/15(水) 20:15   No:36911     
Title: Re:シフト演算についての質問です。    

シフト演算を、どう描画と結びつけるのかが不明なのですが
とりあえず こんな感じでどうでしょう?

※Shiftという関数は、指定した数だけ"□"を表示する関数です。
(ただし、一番右端が"■"になる)

あと、このプログラムには色々と修正の余地があるので、考えてみると良いと思います。

-----------------------------------------------------------------
#include <stdio.h>

void Shift(int num)
{
int i = 0;

if(num > 0){
i = 1 << (num - 1);

while(i){
if(i & 1)
printf("■");
else
printf("□");

i >>= 1;
}
}
puts(" ");
}


int main(void)
{
Shift(9);
Shift(8);
Shift(7);
Shift(6);
Shift(5);
Shift(4);
Shift(3);
Shift(2);
Shift(1);
Shift(2);
Shift(3);
Shift(4);
Shift(5);
Shift(6);
Shift(7);
Shift(8);
Shift(9);

return 0;
}
-----------------------------------------------------------------


205ポイント を手に入れた。

Name: LUNA  ..初心者(5,413ポイント)   Date: 2009/07/17(金) 09:54   No:36962     
Title: Re:シフト演算についての質問です。    
へぇ・・・シフト演算子ってこうやって使うんだなぁ〜・・・
後、mainの中ループ使ってサクッとしたプログラムにできそうね。


52ポイント を手に入れた。



Name: つばき  ..ぴよぴよ(344ポイント)   Date: 2009/07/16(木) 21:42   No:36947       
Title: VC++について    
saveFileDialogクラスを使ってファイルを保存しているプログラムがあります。
このクラスを使うとファイルを保存したいパスを取得し保存しますよね?
このとき最後のファイル名になる部分だけを取り出せないでしょうか?
C:〜〜\data\test.txtだったらtest.txtだけとりたいです。

また保存するとき実行場所にフォルダを作りたいのですが
フォルダをあらかじめ作ってあげないとエラーが起こります。
String^ path = System::Windows::Forms::Application::StartupPath;
path = System::IO::Path::Combine(path, String::Format("Save"));
path = System::IO::Path::Combine(path, String::Format("aaa.txt");
System::IO::StreamWriter^ sw = gcnew System::IO::StreamWriter〜

こう書かずに
+= \Save\aaa.txt

とかくと起動はできるのですが同じくエラーが起こります。

この2点を改善したいです。


344ポイント を手に入れた。


Name: バグ  ..ハッカー(162,978ポイント)   Date: 2009/07/17(金) 00:38   No:36957     
Title: Re:VC++について    
>>ファイル名の取得

System::IO::Path::GetFineName

>>フォルダをあらかじめ作ってあげないとエラーが起こります。

存在しない場所を参照しようとすれば当然です。



// アプリケーションのある位置のパスを取得する
String^ path = System::Windows::Forms::Application::StartupPath;

// Saveディレクトリのパスを作成する
path = System::IO::Path::Combine(path, String::Format("Save"));

// Saveディレクトリの存在の有無を確認する
if (System::IO::Directory::Exists(path) == false)
{
// Saveディレクトリが存在しないので、作成する
System::IO::Directory::CreateDirectory(path);
}

// aaa.txtファイルのパスを作成する
path = System::IO::Path::Combine(path, String::Format("aaa.txt"));

// aaa.txtファイルのストリームを開く(存在しない場合は作成してから開く)
System::IO::FileStream^ fs = gcnew System::IO::FileStream(path, System::IO::FileMode::OpenOrCreate);

// aaa.txtファイルのストリームへ書き込むストリームライタークラスの生成
System::IO::StreamWriter^ sw = gcnew System::IO::StreamWriter(fs);

// 試し書き&後始末
sw->WriteLine("test1");
sw->Close();
fs->Close();


600ポイント を手に入れた。



Name: 土鳩  ..ぴよぴよ(475ポイント)   Date: 2009/07/13(月) 21:53   No:36765       
Title: 3D描画時のメインループについて.    
こんにちは、土鳩といいます。
前回(昨日なのですが…)3D描画の時に消失点を指定できる
CreateViewportMatrix関数とSetTransformToViewport関数を教えていただきました。
しかし、今日これをサンプル(龍神録プログラミングの館59章より)で試そうとしたのですが、
うまくいきませんでした。

void move_view(){
float X=640.f, Y=480.f; // ウィンドウのサイズ
float Xd=-110.f, Yd=0.f ; // 消失点の移動量
MATRIX mat;
CreateViewportMatrix(&mat, X/2.f+Xd, Y/2.f+Yd, X, Y);
SetTransformToViewport(&mat);
}

これをメインループの直前にいれれば、消失点が左に110動くはずなんですが…
自分が「ここだ」と思っているメインループの場所が違うのでしょうか…?
初歩的な問題なのですが、どなたかわかる方は助言,アドバイスの方よろしくお願いします。


249ポイント を手に入れた。


Name: Justy  ..伝説なるハッカー(393,020ポイント)   Date: 2009/07/14(火) 20:53   No:36830     
Title: Re:3D描画時のメインループについて.    

>うまくいきませんでした

 具体的には?
 ビルドが通らなかった、とかですか?



>自分が「ここだ」と思っているメインループの場所が違うのでしょうか…?

 その可能性はありますね。
 ビルドが通っていたと仮定して、ありがちなのが DxLib_Initよりも前だった、とか。

 で、どこにその move_view()を置いたのですか?


212ポイント を手に入れた。

Name: 土鳩  ..ぴよぴよ(582ポイント)   Date: 2009/07/14(火) 22:15   No:36843     
Title: Re:3D描画時のメインループについて.    
Justyさん、返答ありがとうございます。
>ビルドが通らなかった、とかですか?
はい、ビルドの時にエラーが起きて、編集する前の結果しか出ませんでした。
>どこにその move_view()を置いたのですか?

→ここです
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,…

確かに今見返してみれば初期化は何回もする必要ないですよね…


107ポイント を手に入れた。

Name: Dixq (管理人) [URL]  ..ウィザード(1,044,673ポイント)   Date: 2009/07/14(火) 22:48   No:36845     
Title: Re:3D描画時のメインループについて.    
>→ここです

ここ・・というのは関数の外のような気がしますが・・?
そこに関数を書いたということでしょうか?
そうならば、関数の呼び出しはどこで行っていますか?


46ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(393,137ポイント)   Date: 2009/07/14(火) 22:50   No:36846     
Title: Re:3D描画時のメインループについて.    

>ビルドの時にエラーが起きて

 具体的にどういうエラーになったのですか?

 エラーコードと内容、行番号、その周辺のコード等々の詳細情報も含めて書かないと、
読み手側には何が起きているのか伝わらないです。

 特に掲示板ですと、レスが帰ってくるまでラグがあるので、
状況を把握する為だけのやりとりだけで無駄に時間が過ぎていってしまいますよ。


 説明が難しいのであれば、状況を再現できるコードをアップすれば、
何かわかるかもしれません。


117ポイント を手に入れた。

Name: 土鳩  ..かけだし(1,005ポイント)   Date: 2009/07/14(火) 23:32   No:36849     
Title: Re:3D描画時のメインループについて.    
…前の書き込みでいろいろと不手際があったようです…
ご迷惑をかけてすみません…
>ビルドの時にエラーが起きて
その時に出たエラーの内容というのが、
「ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか?」
とのことでした。
そりゃあれだけむちゃくちゃな文の入れ方してればエラーも起きますよねぇ…。
>管理人様
管理人様の、「関数の呼び出し」という言葉でつっかかるものがあり、
最初から見返してみれば、「void 〜 (){}」はあくまで定義するだけで、
その後メインループのなかに「〜()」を入れないと使えないということに
気づきました…。
ということで、ここに入れればいいのだと思いますが、どうでしょうか(汗)??

*Ob2 = t;
}

void move_view(){
float X=640.f, Y=480.f;

〜中略〜
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

ini();
  move_view();



423ポイント を手に入れた。

Name: Justy  ..伝説なるハッカー(393,533ポイント)   Date: 2009/07/15(水) 23:46   No:36920     
Title: Re:3D描画時のメインループについて.    

>「ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか?」
>とのことでした。

 なるほど、そういうことでしたか。
 つまり、土鳩さんの方ではエラーの内容を見ていないわけですね。

 環境が書かれていませんが、多分 VisualStudioだと思いますので、
それを前提で話を進めます。

 まず、「出力ウインドウ」を表示してください。
 画面内になければ、メニュー「表示」の中にある「出力ウインドウ」を選択すれば出てきます。

 出力ウインドウの「出力元の表示」が「ビルド」になっていることを確認し、
実際にビルドを行ってください。

 これで、出てきたメッセージの中に
 例えば、

    e:\xxx\xx\xx\xx\test.cpp(22) : error C2143: 構文エラー : ';' が '}' の前にありません

 のような感じでエラーが発生したソースパス、エラーコードや、エラーの内容が
表示されているはずです。

 ひとまずこのメッセージを解析してエラーを取り除いてみてください。
 それでも判らなければ、そのソースコードと一緒にそのエラーメッセージを
添えて再質問をしてください。



>ここに入れればいいのだと思いますが、どうでしょうか(汗)??

 多分それでいいと思います。



396ポイント を手に入れた。

Name: 土鳩  ..ぴよぴよ(849ポイント)   Date: 2009/07/16(木) 23:02   No:36951 解決!     
Title: Re:3D描画時のメインループについて.    
Justyさん、管理人様、ありがとうございました。
これからエラー等の質問をする際には中身まで詳しく調べてからそれを
伝えるようにします。
それと、ビルドエラーの方は正しく関数を使うように書き込んだら自然と治ってしまいました…。
もうこんな簡単なことに引っかからないよう
もっと勉強しなくては、と改めて実感した限りです…
まだまだC言語に関してはひよっこなので、また迷惑を掛けてしまうかもしれませんが、
そのときはまたよろしくお願いいたします。
今回は本当に、ありがとうございました。


156ポイント を落としてしまった。



Name: もずく  ..ぴよぴよ(391ポイント)   Date: 2009/07/16(木) 21:09   No:36943       
Title: すいません;    
完全に、ゆとり発言何ですが龍神禄の館ってありますよね?
そこの項目に「1面を作ってみよう」って項目があるんですが、そこのプログラムをコピペしたら、すぐに作れますかね?   


68ポイント を手に入れた。


Name: たかぎ [URL]  ..ハッカー(107,942ポイント)   Date: 2009/07/16(木) 21:14   No:36945     
Title: Re:すいません;    
コピペだけでは無理です。


17ポイント を手に入れた。



Name: s-rush  ..熟練のプログラマー(53,082ポイント)   Date: 2009/07/16(木) 08:40   No:36928       
Title: 自キャラが動かない    
先日はお世話になりました。
無事にエラーが外れましたので、(この時点で動作確認していませんでした^^;)
マップ制作に取り掛かっていたのですが、
デバッグすると、今度は自キャラが動かなくなってしまいました。
自キャラの向きは変わるので、キー入力は認識しているようなのですが、
まるで四方に壁があるがごとく、前に進むことができません。

以前との変更点はextern 関数名・変数名というところを
ifdefを使用してGLOBAL 関数名・変数名としただけです。

なので、このような不具合が生じた原因が正直わかりません。
単純に私の理解不足で書き方が間違っているだけかもしれませんが^^;
もしそうなら、原因はmain.cpp、GV.h、fanction.hのいずれかにありそうですが・・・



ソースをアップしておきますので、見てもらえないでしょうか?
アップロード様
http://u1.getuploader.com/s-rush/download/2/data.zip
pass:pokemon

ソースはsourceフォルダに入っています。
また、症状が分かりにくいと思いましたので実行ファイルも入れておきました。
Debugフォルダの中に入っています。
ただ、ロードに必要最低限のグラフィックしか入れていませんので、
途中真っ暗になる個所があります。
Zキーを連打しておいてください。
数秒後にマップ上にいる画面に移り変わります。
(まだマップが未完成なので、少々おかしいですがバグではないです)


開発環境 VC++ 2008 EE DXライブラリ使用

よろしくお願いします。


463ポイント を手に入れた。


Name: ねこ  ..プログラマー(27,305ポイント)   Date: 2009/07/16(木) 09:56   No:36929     
Title: Re:自キャラが動かない    
まず問題点のフォーカスを絞った方が良いんじゃないかな?

1.CSVから読んだマップ情報は正常に配列に格納されているか
2.extern処理を追加した際、宣言時に初期化を行っていた処理を消したりしていないか、または異なる値を入れていないか
3.歩行可能かを判定している関数に問題は無いか

等、もう少しs-rushさんの方でどのエリアに問題があるのか絞ってもらわないと
ちょっと調べるにはプロジェクトの規模が大きい気がします。


150ポイント を手に入れた。

Name: pooka [URL]  ..中級者(10,853ポイント)   Date: 2009/07/16(木) 11:13   No:36934     
Title: Re:自キャラが動かない    
proceed_x,proceed_yという配列の値が0のままだからではないでしょうか?
それぞれの値を適当に決めてやってみたところ動きました。


41ポイント を手に入れた。

Name: s-rush  ..熟練のプログラマー(53,440ポイント)   Date: 2009/07/16(木) 14:53   No:36936 解決!     
Title: Re:自キャラが動かない    
>>ねこさん
>宣言時に初期化を行っていた処理を消したりしていないか
原因はこれでした^^;
初期化していた部分のプログラムががなぜか消えていたので動かないみたいでした。
というよりもファイルごと消えていたようです・・・

他にも初期化しなければいけない箇所も消えている状態でよく起動したなぁ・・・


>>pookaさん
>proceed_x,proceed_yという配列の値が0のままだからではないでしょうか?
おっしゃるとおりでした。
GV.hの箇所に

#ifdef GLOBAL_INSTANCE
int proceed_x[4]={0,-1,0,1}; //向きを表す配列
int proceed_y[4]={-1,0,1,0}; //向きを表す配列



#else
GLOBAL int proceed_x[4];
GLOBAL int proceed_y[4];



#endif

というように書き換えたところ、正常に動作しました。


初歩的なミスでお騒がせして申し訳ありませんでした。


358ポイント を手に入れた。




 
[ 1 , ... ]
 
 
管理者画面   RSS   + Powered By 21style +