Re: !ProcessMessage()の意味について ( No.7 ) |
- 名前:マーク42 日時:2020/06/18 20:29
ただ、いまだにDXライブラリが使いこなせないことでDXライブラリを作った方への申し訳なさはあります。
親切に回答していただいたのに使いこなせなくて本当に申し訳ございません。
使う資格も力もないことは承知でありますが、どうか今後も使わせていただきたいです。
|
Re: !ProcessMessage()の意味について ( No.8 ) |
- 名前:あいおい? 日時:2020/06/18 22:42
ProcessMessage()の値を変えると無茶なこと言っているあたり、お使いのプログラミング言語の基本がまだ理解できていないのだと思われます。
戻り値は、その関数がどんな値を返すかで決まるので、こちらから自由に値を決めることはできませんし、仮にできたとしても、それは関数の想定した動作にはならないはずです。
まず、DXライブラリを使う前に、お使いの言語の入門書などを読んでから、このライブラリを使うべきだと思います。
|
Re: !ProcessMessage()の意味について ( No.9 ) |
- 名前:マーク42 日時:2020/06/18 22:45
これでも入門書は読んだのですが、戻り値に関する知識や考えが浅かったのは事実です。
|
Re: !ProcessMessage()の意味について ( No.10 ) |
- 名前:sereparu 日時:2020/06/19 09:33
すみません。
つい感情的になってしまい、プログラミングをやめた方がいいとか
今後一切回答しないとか、無責任な回答してしまい申し訳ありません。
私も回答者として未熟者でした。
お詫びに「ウィンドウがキー入力後に消えてしまう」問題について回答します。
ただ、直接的な解決方法は書くことはできません。(理由は以下を読んでください)
マーク42さんが載せたコードは、おそらくリファレンスに載っている
「MakeKeyInput」のサンプルコードの一部分(whileループの部分)ですよね?
その一部分のコードの内容は、サンプルと全く同じなので問題ないと考えます。
サンプルのコードは正常に動作するからです。
ということは、問題はマーク42さんが載せたコードの外にあると考えます。
なので、具体的にどの部分に問題があるかは、マーク42さんがコード全文を
載せていないので、答えようがありません。
ただ、確実に言えるのは、サンプルコードが問題ない以上
マーク42さんがサンプルに何かしら手を加えたことで
正常に動作しなくなったのは明らかです。
なので、私は「原因はマーク42さんが書いたコードにあります。」と書いたのです。
改めてサンプルコードをそのままコピーしてみれば、正常に動作するはずです。
それを確かめた上で、自分のコードとサンプルコードのどこが違うのかを確認してください。
推測ですが、「WaitKey();」(キー入力待ち)が抜けているから
入力待ちせずにすぐに終了する、などではないでしょうか?
サンプルコードをコピーして使うことは問題ないですが
書かれている内容を理解せず使っていませんか?
「入門書は読んだ」と書かれていますが
入門書に書かれているコードを何も考えず打ち込んで動かして
動いたから「理解した」と思い込んでいませんか?
そうだとしたら、それは「理解した」とは言えません。
もう少し1つ1つの処理の内容に注意を払うようにしましょう。
そうすれば、問題が起きた時に、どこに問題があるか
すぐに見当がつくようになります。
|
Re: !ProcessMessage()の意味について ( No.11 ) |
- 名前:Katarina 日時:2020/06/19 10:20
プログラミングをやることは良いことですが、ここで聞くにはまだ早すぎると思います。
見当違いなことを聞くことが多いように思えます。
見当違い、というのは「DXライブラリの質問である必要のない質問」ということです。
プログラムの基礎がわかっていれば聞く必要はないです。
参考になるウェブサイトもたくさんありますし、
まだよくわからないのであれば、リファレンスのコピペなどで動かすことも大切です。
DXライブラリを使うのにはまだ早すぎるというのもわかるレベルです。
|
Re: !ProcessMessage()の意味について ( No.12 ) |
- 名前:マーク42 日時:2020/06/19 12:01
sereparuさん、解答ありがとうございます。
おっしゃる通りちゃんと理解できていないのにサンプルを使い、問題を作ってしまいました。
私自身の出来が悪すぎるので感情的になられても仕方ないです。ここまでお付き合いして頂けただけでも大変ありがたいです。
Katarinaさん、解答ありがとうございます。本当にその通りです。皆さんのように才能や自頭が良ければよかったです。
epistemeという方に頂いたコードにより元のコードの何がいけなかったのかを調べ、作り直したコードを載せます。
#include "DxLib.h"
#include <string>
int konnnitiwasound = 0;
int situreisimasitasound = 0;
char String[256];
int InputHandle;
int modoru = 0;
std::string input;
std::string message;
int duration = 0;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
SetGraphMode(700, 780, 32); // ウィンドウの大きさを指定
ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
// DXライブラリの初期化
if (DxLib_Init() == -1) return -1;
SetFontSize(42); //サイズを42に変更
// 描画先を裏にする
SetDrawScreen(DX_SCREEN_BACK);
// キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし)
//MakeKeyInputは開発者の方が一回呼び出せば使えるように作ったのでループ内には書かない。
InputHandle = MakeKeyInput(50, FALSE, FALSE, FALSE);
// 作成したキー入力ハンドルをアクティブにする
SetActiveKeyInput(InputHandle);
// キー入力終了待ちループ
// (ProcessMessageをループごとに行う)
while (ProcessMessage() == 0)
{
// 画面の初期化
ClearDrawScreen();
//まずは描画する部分から作る。
// 入力モードを描画
DrawKeyInputModeString(640, 480);
// 入力途中の文字列を描画
DrawKeyInputString(0, 0, InputHandle);
//その後にif文での分岐を考える。
// 入力が終了している場合は終了
//ループ内とは言えエンターキー一回でCheckKeyInputが呼べればいい。
//エンターキーが押されていないとき?の部分。
if (CheckKeyInput(InputHandle) != 0) {
// 入力された文字列を取得
// char buffer[256];//
// 入力された文字列を取得
GetKeyInputString(String, InputHandle);
// input = buffer;
DrawString(0, 0, String, GetColor(255, 255, 255));
if (strcmp(String, "こんにちわ") == 0) {
message = "こんにちわ!";
konnnitiwasound = LoadSoundMem("line-girl1-konnichiha1.mp3");
PlaySoundMem(konnnitiwasound, DX_PLAYTYPE_BACK);
}
else {
message = "申し訳ございません!";
situreisimasitasound = LoadSoundMem("line-girl1-moushiwakegozamasen1.mp3");
PlaySoundMem(situreisimasitasound, DX_PLAYTYPE_BACK);
}
//duration = 1;
// 再度インプットハンドルをアクティブにする
SetActiveKeyInput(InputHandle);
// 入力文字列を初期化する
SetKeyInputString("", InputHandle);
}
// DrawFormatString(100, 150, GetColor(255, 255, 0), "ProcessMessage()は%d,modoruは%d", ProcessMessage(), modoru);
DrawString(100, 500, message.c_str(), GetColor(200, 200, 255));
// 裏画面の内容を表画面に反映させる
ScreenFlip();
}
// 用済みのインプットハンドルを削除する
DeleteKeyInput(InputHandle);
// 画面の初期化
ClearDrawScreen();
// 裏画面の内容を表画面に反映させる
ScreenFlip();
// キー入力待ち
// WaitKey();
//ループないやループから出た後で何かしらの問題が発生したら終了する。
// DXライブラリの使用終了
DxLib_End();
// 終了
return 0;
}
|
Re: !ProcessMessage()の意味について ( No.13 ) |
- 名前:相田 日時:2020/06/19 13:12
さんをつけろよデコ助野郎
|
Re: !ProcessMessage()の意味について ( No.14 ) |
- 名前:マーク42 日時:2020/06/19 14:24
あ、さんつけ忘れました!
epistemeさんです。
|
Re: !ProcessMessage()の意味について ( No.15 ) |
- 名前:マーク42 日時:2020/06/19 14:59
sereparuさん、返信とアドバイスありがとうございます。
いえいえ、いつも解答してくださり感謝しております。
私の書いたプログラムのループとDXライブラリの関数への考え方が低いせいで思うように書けませんでした。
入門者の基礎的な問題は解いているのですが、それでも基礎力と応用力がないので、苦労をおかけします。
|
Re: !ProcessMessage()の意味について ( No.16 ) |
- 名前:Fizz 日時:2020/06/19 17:32
>>マーク42
DXライブラリタグ
ttps://teratail.com/tags/DX%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
二つのif文が重複してしまう。
ttps://teratail.com/questions/213060
1から100の値を出力する。 ただし、値が3の倍数ならFizz、5の倍数ならBuzz、 3と5の公倍数ならFizzBuzzを出力する。
ttps://teratail.com/questions/207927
変数zannzoulockが変化しません。
ttps://teratail.com/questions/228434
毎日ライブラリ公式に泣きついて、わざとスレを乱立してここまで教えて貰っておいて
これからもFFGXやら捨てハンで不正連投するだろうから、本性わかるように過去ログぐらい貼っておいたらどうですか?
ttps://teratail.com/questions/270866
↑解決してもらったepistemeさんがちょうど目の前にいますが以前アイコン画像がなめくじやら中傷した事は謝らないんですか?
|
Re: !ProcessMessage()の意味について ( No.17 ) |
- 名前:マーク42(解決) 日時:2020/06/19 19:39
皆さん、どうもありがとうございました。
|
Re: !ProcessMessage()の意味について ( No.18 ) |
- 名前:相田 日時:2020/06/19 21:33
慌てて幕引きを図るのも無理はないか
|
Re: !ProcessMessage()の意味について ( No.19 ) |
- 名前:このライブラリ知らない人 日時:2020/06/19 22:23
(公知の事実だから,そんなに慌てなくても良いよね.)
|
Re: !ProcessMessage()の意味について ( No.20 ) |
- 名前:名無三 日時:2020/06/22 23:16
ごめん見かねてここに書くけど、マーク42さんはDXライブラリを使う以前に
・Cに関する理解の大幅な不足
・自身で確認する力がない(必要)
・掲示板の過去ログなら1000歩譲ってリファレンスを読めない
などなどの問題を抱えています。
貴方の行動は映画でのMark42ですらなく、さながらアイアンモンガーです。
奴はMark2の初歩的な弱点をそのままにしていたせいでMark3に負けましたよね?それと同じです。
ちゃんと段階を踏んでまずはMark3(問題点のない状態)を作り上げてください。Mark3以降の経験あってこそのMark42ですから。
|
Re: !ProcessMessage()の意味について ( No.21 ) |
- 名前:マーク42 日時:2020/06/23 01:57
あの、アイアンモンガーとは何でしょうか?
マーク42とはたまたま思いついた名前です。
なんにしても問題のない状態にする必要があるのは確かです。
|
Re: !ProcessMessage()の意味について ( No.22 ) |
- 名前:名無三 日時:2020/06/23 05:28
マーク42の由来はアイアンマン3のあれじゃ無いのか…例えがわかるかと思ったが申し訳ない…
とにかくスレを乱立するより先にする事があるのでそちらをしてください。
|
Re: !ProcessMessage()の意味について ( No.23 ) |
- 名前:でぃあぶろ 日時:2020/06/23 10:03
TwitterにてMARVELの話をしてたのでてっきりアイアンマンのそれかと思ってたのですが違うのですね…
|
Re: !ProcessMessage()の意味について ( No.24 ) |
- 名前:マーク42 日時:2020/06/23 12:42
ああ!アイアンモンガ―ってオバディアの乗ってるあの黒くてでかいやつですね!忘れていました。
もちろんアイアンマンは知ってますよ!ただマーク42はそっからつけたわけではないので、気が付けませんでした。
個人的には2で出てきた装甲の薄いけどかっこいいマーク5が好きです。マーク42もデザインが良いので好きです。
なるほど、名無三さんの言いたいことはなんとなくわかりました。今の状態ではアイアンモンガ―すら無理ですが。
よくよく考えると自分のポンコツな部分がマーク42と重なるので、無意識にマーク42と付けたのかもしれません。
でぃあぶろさん、返信ありがとうございます。
私、ツイッターでアイアンマンの話なんてしてましたでしょうか。忘れていたらすいません。
|
Re: !ProcessMessage()の意味について ( No.25 ) |
- 名前:でぃあぶろ 日時:2020/06/23 13:30
うーん,結局そういうところなんじゃないかなと思うのですが,
私「TwitterにてMARVELの話をしてた…」と書いてますよね?「アイアンマンの話をしていた」とは書いてないのですが.
マーク42さんはプログラミング云々よりまずしっかり文を読むこと,そして理解することから始めてはいかがですか?
と言いたくなってしまうほどにミスリードが多い気がしますね.頑張りましょう…
|
Re: !ProcessMessage()の意味について ( No.26 ) |
- 名前:マーク42 日時:2020/06/23 15:31
>>TwitterにてMARVELの話をしてたのでてっきりアイアンマンのそれかと思ってたのですが違うのですね…
から勝手にアイアンマンの話についてだと思い込んでいました。すいません。
おっしゃる通り、ミスリードが多いです。しっかり読んでいるつもりでも理解できていなかったり、思い込みの部分があるようです。
自分の欠点が痛いほどわかるので、
がんばってなんとかなるようには思えないですが、少なくと皆様から教えて頂いている立場としてご迷惑を掛けないように努めさせていただきます。
またTwitterを見ていただきありがとうございます。
|