|
Name: 匿名 ..中級者(10,128ポイント)
Date: 2009/03/12(木) 20:34
No:30545
|
|
Title: 音楽の一時停止
|
|
ポーズをかけた時とかにBGMとか効果音の再生を止めて、解除した時に止めた位置から再生されるようにしたいんですが、どうしたらいいでしょうか?
63ポイント を手に入れた。
|
|
|
|
Name: yu [URL] ..上級者(19,525ポイント)
Date: 2009/03/12(木) 20:56
No:30547
|
|
Title: Re:音楽の一時停止
|
|
Dxライブラリだとしてですが
音楽を止めるのは、LoadSoundMem(handle)関数でロードしたのなら
StopSoundMem(handle)関数で止めます
そして、止めた音楽を再生する際に
PlaySoundMem(handle,PLAYTYPE,FALSE)関数の
第三引数にFALSEを入れてみてください。
最初からではなく、途中から流れるようになると思います。
handleは同じ値です。
本家リファレンスに書いてないんですよね・・・
136ポイント を手に入れた。
|
|
|
|
|
Name: 匿名 ..中級者(10,162ポイント)
Date: 2009/03/14(土) 18:26
No:30728
| 解決!
|
Title: Re:音楽の一時停止
|
|
そんな方法があったとは気づきませんでした。
さっそくやってみます、どうもありがとうございました。
34ポイント を手に入れた。
|
|
|
|
Name: みー ..ぴよぴよ(915ポイント)
Date: 2009/03/13(金) 21:13
No:30613
|
|
Title: 2Dゲームの作り方
|
|
C言語で画像などを表示する場合DirectXなどの手助けが必要になりますょね。
そこで僕はここに載っていたDXライブラリというものを利用しようと思ったのですが、僕はBCCとメモ帳を使っていてBCC Developerを使う気がまったくありません。
そしてここに書いてあるやり方はBCC Developerを使ったやり方なのでBCCのみを使った場合どうしたらいいのかよくわかりません。
一度自分なりにやってみようと重い、DXライブラリをダウンロードしてパスを通してみたのですが
//c.c
#include "Dxlib.h"
int WINAPI WinMain
(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, Int nCmdShow)
{
if (DxLib_Init()==-1) return 1;
DrawPixel(320,240,0xffff);
WaitKey();
DxLib_End();
return 0;
}
//コンパイル結果
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
c.c:
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 927: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 941: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 947: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 970: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 978: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 1060: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 1074: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 1080: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 1090: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 1118: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 1128: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 1142: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 1150: 宣言の構文エラー
エラー E2141 \Borland\Dxlib\Substance\DxDirectX.h 1196: 宣言の構文エラー
エラー E2139 \Borland\Dxlib\Substance\DxDirectX.h 1549: 宣言に ; がない
エラー E2139 \Borland\Dxlib\Substance\DxDirectX.h 1555: 宣言に ; がない
エラー E2238 \Borland\Dxlib\Substance\DxDirectX.h 1556: 'class' の宣言が複数見つかった
エラー E2344 \Borland\Dxlib\Substance\DxDirectX.h 1549: 一つ前の 'class' の定義位置
エラー E2139 \Borland\Dxlib\Substance\DxDirectX.h 1564: 宣言に ; がない
エラー E2238 \Borland\Dxlib\Substance\DxDirectX.h 1565: 'class' の宣言が複数見つかった
エラー E2344 \Borland\Dxlib\Substance\DxDirectX.h 1549: 一つ前の 'class' の定義位置
エラー E2139 \Borland\Dxlib\Substance\DxDirectX.h 1570: 宣言に ; がない
エラー E2238 \Borland\Dxlib\Substance\DxDirectX.h 1571: 'class' の宣言が複数見つかった
エラー E2344 \Borland\Dxlib\Substance\DxDirectX.h 1549: 一つ前の 'class' の定義位置
エラー E2139 \Borland\Dxlib\Substance\DxDirectX.h 1577: 宣言に ; がない
エラー E2228 \Borland\Dxlib\Substance\DxDirectX.h 1577: エラーあるいは警告が多すぎる
*** 26 errors in Compile ***
Error!!
このとおり見事に失敗しました。
このエラーの意味もわからず、Yahoo!知恵袋で聞いても返ってこないのであきらめていたのですがこの掲示板を見つけたので質問させていただきました。
別にDXライブラリでなくてもよいので2Dゲームもしくは3Dゲームが作れる(画像などの出力ができる)ライブラリを教えていただけませんか??
OSはWindows XP SP3. コンパイラはBorland C++ Compilerです。
915ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(154,134ポイント)
Date: 2009/03/13(金) 21:19
No:30614
|
|
Title: Re:2Dゲームの作り方
|
|
画像を標準したり音楽を再生したりするだけなら、WINAPIだけでも問題ないのでは?
それよりも何故、BCCデベロッパーやVisualStudioを使おうとしないのかがよく分からないです。しなくて良い苦労をしているように感じます(^_^;)
81ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(41,166ポイント)
Date: 2009/03/13(金) 21:26
No:30616
|
|
Title: Re:2Dゲームの作り方
|
|
エディタにメモ帳を使用しているみたいですが、
ゲームのような大規模なプログラムを書くのであれば、
ちょっとメモ帳では機能が不十分だと思います。
(不十分というより面倒が多いといった方がいいかもしれません)
BCC DeveloperやVicual Studioのようなものを使われた方がいいと思いますよ。
個人的にはVC++ 2008がおすすめです。
98ポイント を手に入れた。
|
|
|
|
|
Name: みー ..かけだし(1,496ポイント)
Date: 2009/03/13(金) 21:37
No:30620
|
|
Title: Re:2Dゲームの作り方
|
|
cppファイルにしてみた結果エラーがひとつになりましたが、これは設定の問題でしょうか??
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
c.cpp:
警告 W8094 \Borland\Dxlib\Substance\Dxlib.h 79: #pragma comment( <type> [,"string"] ) の使用法に誤りがある
警告 W8094 \Borland\Dxlib\Substance\Dxlib.h 80: #pragma comment( <type> [,"string"] ) の使用法に誤りがある
警告 W8094 \Borland\Dxlib\Substance\Dxlib.h 81: #pragma comment( <type> [,"string"] ) の使用法に誤りがある
警告 W8057 c.cpp 10: パラメータ 'hInst' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
警告 W8057 c.cpp 10: パラメータ 'hPrevInst' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
警告 W8057 c.cpp 10: パラメータ 'pCmdLine' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
警告 W8057 c.cpp 10: パラメータ 'showCmd' は一度も使用されない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Fatal: ファイル LIBTHEORA_STATIC.LIB が開けません
Error!!
解決法をお願いしますm(__)m
それから開発環境を使わない理由ですか。。。くだらないですが
例えばコンパイラとメモ帳しか手元にない状況で「いつもと同じことをやれ」と言われたときに「開発環境がなきゃできない」なんてかっこわるいじゃないですか。
最低限の設備さえあれば何でもできるようになりたいなwと思って。というのが理由です。
これは僕の意地で、くだらないと言われればそれまでですが、僕はこのスタイルが好きなのでこれで行きたいと思っています。
だけど開発環境を使わなければこういったものができないというのであればこのスタイルはやめようと思います。
581ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..上級者(15,340ポイント)
Date: 2009/03/13(金) 21:43
No:30622
|
|
Title: Re:2Dゲームの作り方
|
|
>開発環境云々
C/C++のような高級言語でしか開発できないのはかっこわるいですよ。機械語で何でもできるべきです。
52ポイント を手に入れた。
|
|
|
|
|
Name: みー ..かけだし(1,658ポイント)
Date: 2009/03/13(金) 21:55
No:30623
|
|
Title: Re:2Dゲームの作り方
|
|
SooAさん>>
もうしわけありません。
しかしまったく回答がないというのも、どう終了させていいのかわからなくて。。。
利用規約とかも向こうのほうでは書いてないようですし。勝手にリンク張っていくのもだめですょね。。
編集できても消せないみたいですし。
どうしましょうか。。。。。。
SCIさん>>
それも何度か考えましたが、機械語ってどうやって組むんですか??
あなたの言っている機械語というのはアセンブラのことですか??それとも本物の機械語ですか??
アセンブラは多少入門サイトみたいのがありましたが、機械語そのものは見つからなくて。。
162ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(41,217ポイント)
Date: 2009/03/13(金) 21:59
No:30625
|
|
Title: Re:2Dゲームの作り方
|
|
機械語の組み方は知りませんが、0と1の羅列のプログラムですよ。
アセンブラは確か低級言語と呼ばれていたような覚えがあります。
(違ったらごめんなさい)
12ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..上級者(15,465ポイント)
Date: 2009/03/13(金) 22:01
No:30626
|
|
Title: Re:2Dゲームの作り方
|
|
みーさん
>リンク
リンクが貼り辛かったら、別の場所で同じ話題を展開している旨は書いておくといいかも知れません。
>機械語
機械語は機械語です。CPUの仕様書でも手に入れてハンドアセンブルすれば近いことはできるのではないでしょうか。
125ポイント を手に入れた。
|
|
|
|
|
Name: みー ..かけだし(1,778ポイント)
Date: 2009/03/13(金) 22:12
No:30630
|
|
Title: Re:2Dゲームの作り方
|
|
SCIさん>>
アドバイスありがとうございました。とりあえず
「あまり返信がないようなのでほかの掲示板でも聞いています。」
と書いておきました。
とりあえずnasmとアセンブリ言語の参考書は持っていますが最近はC言語ばっかり使っているのでアセンブラは全然使えませんね。。。
まだ32ビットのプログラムが組めないのでDOSのプロンプトでのドライブ移動がわからないのと重なって使う気もでません(C言語のほうが楽ですし)。
120ポイント を手に入れた。
|
|
|
|
|
Name: みー ..かけだし(1,862ポイント)
Date: 2009/03/13(金) 22:25
No:30633
|
|
Title: Re:2Dゲームの作り方
|
|
ちょっと思い当たる節があって変更してみたら違うエラーが出ました。
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(E:\BORLAND\LIB\C0X32.OBJ が参照)
84ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(70,690ポイント)
Date: 2009/03/13(金) 22:33
No:30637
|
|
Title: Re:2Dゲームの作り方
|
|
コマンドプロンプトで直接コンパイルしてますよね?
コマンドラインオプションを使って Windows アプリケーションとしてコンパイルしてください。
何も指定しないとコンソールアプリケーションを作成しようとします。
…ちなみに私の勤めているゲーム会社で聞いた話ですが、
面接でプログラムを書くのにメモ帳を使ってます、という方がいたそうですが、
「さすがにそれはないわ…」とあきれていたそうです。
(哀れみの意味で)
どうやらその方は通っていた専門学校でもメモ帳を使い続けていたそうです。
せめて、高機能エディタ辺りを使いこなしたほうがいいと思います。
そういうものは職場についてから愛用のエディタを探すより、
先に手にしたほうが良いです。
# 環境に応じてエディタを使い分ける方もいます。
338ポイント を手に入れた。
|
|
|
|
|
Name: みー ..かけだし(1,905ポイント)
Date: 2009/03/13(金) 22:38
No:30638
|
|
Title: Re:2Dゲームの作り方
|
|
SCIさん>>
終了させてきました。
それよりなんかBCCを使い始めたころに見たことがあるようなエラーですが気のせいでしょうか??
43ポイント を手に入れた。
|
|
|
|
|
Name: みー ..かけだし(1,967ポイント)
Date: 2009/03/13(金) 22:41
No:30640
|
|
Title: Re:2Dゲームの作り方
|
|
御津凪さん>>
できました!!
ありがとうございます。
全画面表示になるけどこれってそういうものなんですょね。
62ポイント を手に入れた。
|
|
|
|
|
Name: 朽木 ..かけだし(1,874ポイント)
Date: 2009/03/13(金) 22:46
No:30641
|
|
Title: Re:2Dゲームの作り方
|
|
解決方法とか書いた方が良いんじゃないでしょうか。
あと、全画面になってしまうのは、
int ChangeWindowMode( int Flag ) ; ( true -> ウインドウ, false -> フルスクリーン(デフォルト) )
を使っていないからではないでしょうか。
70ポイント を手に入れた。
|
|
|
|
|
Name: みー ..かけだし(2,033ポイント)
Date: 2009/03/13(金) 22:59
No:30642
|
|
Title: Re:2Dゲームの作り方
|
|
朽木さん>>
めっちゃバグってましたがなんとかウィンドウモードで実行できました。
解決策:
DXライブラリにパスを通し、コンパイル時には-Wスイッチを使い、cppファイルとしてコンパイルする。
といったところですか.....??
66ポイント を手に入れた。
|
|
|
|
|
Name: みー ..かけだし(2,087ポイント)
Date: 2009/03/14(土) 13:17
No:30705
|
|
Title: Re:2Dゲームの作り方
|
|
というわけで皆様ご協力ありがとうございました。
また機会があればよろしくお願いします。
2倍のポイントを手に入れた! 54ポイント を手に入れた。
|
|
|
|
Name: soodbt ..ぴよぴよ(92ポイント)
Date: 2009/03/13(金) 20:01
No:30611
|
|
Title: シューティングゲームの館のソースにエラーが・・・
|
|
毎度もうしわけありません;
http://dixq.net/s/
コチラのサイトのコードを
main.cppで実行(ソースファイル/main.cpp)すると
エラーが40個ぐらい出ます
未解決の外部シンボルがどうのこうの・・・
初期準備設定の仕方がよくわかりません;
解決方法はありませんか?
82ポイント を手に入れた。
|
|
|
|
Name: soodbt ..ぴよぴよ(122ポイント)
Date: 2009/03/14(土) 09:37
No:30695
| 解決!
|
Title: Re:シューティングゲームの館のソースにエラーが・・・
|
|
できましたw毎度ありがとうございますw
2倍のポイントを手に入れた! 10ポイント を手に入れた。
|
|
|
|
Name: soodbt ..ぴよぴよ(10ポイント)
Date: 2009/03/12(木) 20:13
No:30543
|
|
Title: シューティングゲームの館のサンプル素材について
|
|
(-_-;)リンク切れだったのですが、
管理人に問い合わせても反応がないです><;
所持している人にお願いなのですが、
うpしていただけませんか?
10ポイント を手に入れた。
|
|
|
|
Name: cosmo ..初心者(8,707ポイント)
Date: 2009/03/13(金) 07:49
No:30590
|
|
Title: Re:シューティングゲームの館のサンプル素材について
|
|
シューティングゲームの館のソースとプロジェクトの一括ダウンロードその一(又はその二)
という項目からダウンロードすると、サンプル素材が一通り入っていますよ。
63ポイント を手に入れた。
|
|
|
|
Name: きい ..ぴよぴよ(177ポイント)
Date: 2009/03/12(木) 12:07
No:30508
|
|
Title: ビット演算
|
|
課題で出たのdすが、わからないのでもしよろしければ教えてください。
0〜255の整数値をマイナス符号に置き換え、ビット列として表現するプログラムです。ビット列は12ビットです。
手順:10進数から二進数に変換。
その変換したものを反転させる。
さらに、「1」を加え(2の補数とり)表示。
10進数から、2進数の変換までは教科書をみながら出来たのですが、そのあとが;;
177ポイント を手に入れた。
|
|
|
|
Name: 朽木 ..かけだし(1,673ポイント)
Date: 2009/03/12(木) 12:16
No:30510
|
|
Title: Re:ビット演算
|
|
ビット列として表現する、ということは、10は 0000 0000 1010 、15 は 0000 0000 1111 、ということですか?(反転無視)
プログラミングの課題で 10 進数から 2進数 への変換という表現は少々罠な感じがしますが、
とりあえず、ビット演算子というものをGoogleなどで調べてみると良いでしょう。
http://www.google.co.jp/search?hl=ja&q=ビット演算子
表現については for文 と printf() で十分なはずです。 ってか、3ポイントってどういうこと… (・ω・`)
3ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..中級者(14,951ポイント)
Date: 2009/03/12(木) 12:22
No:30512
|
|
Title: Re:ビット演算
|
|
質問者さん
課題ということは「使ってもいいこと」「使っちゃダメなこと(習ってないこと?)」とか、制限がありませんか?
タイトル通り「ビット演算」をズバリ使ってもいいなら、御津凪さんの方法で(手順は変わりますが)一発ですね。
77ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(87,668ポイント)
Date: 2009/03/12(木) 12:29
No:30513
|
|
Title: Re:ビット演算
|
|
何が分からないのか分かりませんが、C++なら、
#include <iostream>
#include <cstdlib>
#include <bitset>
#include <string>
std::string compl2(const std::string& decimal)
{
std::bitset<12> bs(std::strtoul(decimal.c_str(), 0, 10));
bs = ~bs;
bs = bs.to_ulong() + 1;
return bs.to_string<char, std::char_traits<char> >();
}
int main()
{
std::cout << compl2("123") << std::endl;
}
といったところです。
133ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(38,536ポイント)
Date: 2009/03/12(木) 12:34
No:30514
|
|
Title: Re:ビット演算
|
|
>手順:10進数から二進数に変換。
これは、何をすればいいのかがわかりません。
>10進数から、2進数の変換までは教科書をみながら出来たのですが
ここまでのプログラムを載せてもらえますか?
110ポイント を手に入れた。
|
|
|
|
|
Name: 朽木 ..かけだし(1,941ポイント)
Date: 2009/03/12(木) 12:51
No:30515
|
|
Title: Re:ビット演算
|
|
とりあえず、言語の指定が無い以上、ここで出されるべき言語はCですから、C++で出す意味は無いと思いますよ。
Cを習っている人から見れば、「え?こんなに難しいことをしなければいけないの?」という混乱をしてしまい、
無益な回答で、せっかく学習意欲のある質問者がかわいそうです。
アメリカで買った本とイギリスで買った本を持ち帰って二つとも同じにみて勉強してしまい、いざとなった時に
通じなかったり、まったく意味が異なっていて泣き寝入りしてしまうのと同じような結果に繋がります。
「C++も勉強する事になるかもしれないし?いいじゃん」ではなく、今勉強している事について、
手を差し出すべきではないでしょうか。
で、連投で申し訳ないんですが、
10進数から2進数に変換ですが、もしかして12( + 番兵)バイトの文字列に変えるということでしょうか。
もっと詳しい情報が欲しいです。プログラムは実行できない状態でも良いので載せて頂けますか。
268ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..上級者(15,063ポイント)
Date: 2009/03/12(木) 13:04
No:30516
|
|
Title: Re:ビット演算
|
|
朽木さん
>無益な回答で、せっかく学習意欲のある質問者がかわいそうです。
そのような意欲ある学生さんは、まず自分で調べ、分からなければ「学校で」質問等するでしょう。
それを踏まえてここで回答を得ようと思うなら、当然必要な情報はすべて掲載するでしょう。
ここはリファレンスではありません。文字の向こうには「回答者」が存在する、公共の場です。
112ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(87,770ポイント)
Date: 2009/03/12(木) 14:59
No:30521
|
|
Title: Re:ビット演算
|
|
> ここで出されるべき言語はCですから、
そんなことは決まっていません。
この掲示板では、DXライブラリの話題も多く、その場合は暗黙的にC++ですからね。
そもそも、環境も不明なら、自分で作ったソースも貼っていませんから、どうしようもありません。
> C++で出す意味は無いと思いますよ。
意味がないかどうかは当の本人にしか分かりませんね。
> 無益な回答で、せっかく学習意欲のある質問者がかわいそうです。
本当に学習意欲があれば、得られた情報を無駄にするようなことはありません。
それに、利用規約ぐらいは把握し、それを実行するはずですね。
102ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(88,121ポイント)
Date: 2009/03/12(木) 15:29
No:30525
|
|
Title: Re:ビット演算
|
|
一応Cでも書いてみました。
#include <stdio.h>
#include <stdlib.h>
#define DIGIT 12
void compl2(_Bool binary[DIGIT], const char *decimal)
{
unsigned long value = strtol(decimal, NULL, 10);
for (size_t i = 0; i < DIGIT; i++)
binary[i] = value & (1ul << i);
for (size_t i = 0; i < DIGIT; i++)
binary[i] = !binary[i];
_Bool carry = 1;
for (size_t i = 0; i < DIGIT; i++)
{
unsigned t = binary[i] + carry;
binary[i] = t & 1;
carry = t > 1;
}
}
int main(void)
{
_Bool binary[DIGIT];
compl2(binary, "123");
for (size_t i = 0; i < DIGIT; i++)
printf("%c", binary[DIGIT - 1 - i] ? '1' : '0');
}
> 「え?こんなに難しいことをしなければいけないの?」という混乱をしてしまい、
どう考えてもC++の方が簡単です。
351ポイント を手に入れた。
|
|
|
|
|
Name: やそ ..比類無きプログラマー(88,643ポイント)
Date: 2009/03/12(木) 21:02
No:30548
|
|
Title: Re:ビット演算
|
|
まずは、掲示板の上にある、
必ずお読み下さい → 規約と注意事項
から規約を読んで、
”質問の仕方”
を手に入れましょう。
読めばお分かりになると思いますが、
必要な情報が足りません。
課題はC?C++?
課題として出された設問文?に制限項目などありますか?
使用できる命令とか使用してはいけないものとか(ビット演算子は使えるの??)
また、ご自分が作成されたプログラム(10進数から2進数への変換)
はここに載せられますか?
>10進数から、2進数の変換までは教科書をみながら出来たのですが、そのあとが;;
ということですが、
>その変換したものを反転させる。
>さらに、「1」を加え(2の補数とり)表示。
の部分だけアドバイスできれば良いのでしょうか?
313ポイント を手に入れた。
|
|
|
|
|
Name: きい ..ぴよぴよ(275ポイント)
Date: 2009/03/13(金) 03:45
No:30585
|
|
Title: Re:ビット演算
|
|
バイトなどでかなり見るのが遅くなりましたが、回答をしてくださった方々ありがとうございます。
言語はC++です;
条件はあの手順だと思います。そう書いてるので。
0〜255の数字は入力する数字です。
10から2進数の変換のプログラムは、ほぼ教科書どおりです。
12バイトのことだと思います。
返信が遅くなり申し訳ございません。
98ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..上級者(15,190ポイント)
Date: 2009/03/13(金) 03:52
No:30586
|
|
Title: Re:ビット演算
|
|
とにかく、自分で作ったソースを載せましょう。
また「教科書どおり」で話が通じる人は、おそらくここにはいませんよ。
47ポイント を手に入れた。
|
|
|
|
|
Name: conio [URL] ..中級者(12,217ポイント)
Date: 2009/03/13(金) 15:09
No:30603
|
|
Title: Re:ビット演算
|
|
@10進数から2進数に変換。
Aその変換したものを反転させる。
Bさらに、「1」を加え(2の補数とり)表示。
まず、@が良く分からないのです。
”10進数から2進数の変換するプログラム”を書いたという事ですか?
例えば、
int a = 10;
こうすれば、既に内部では2進数になっていますよ。
特にプログラムにする部分は無いと思います。
次に、Aは補数演算子~ を使えばいいと思います。
Bは、単純に1を足して、
表示する時は、
-------------------------------------------------------------
11ビット右へシフトしたものと、1の論理績& をとったものを表示
10ビット右へシフトしたものと、1の論理績& をとったものを表示
9ビット右へシフトしたものと、1の論理績& をとったものを表示
8ビット右へシフトしたものと、1の論理績& をとったものを表示
<以下略>
-------------------------------------------------------------
これをfor文か何かで実装すればいいと思います。
446ポイント を手に入れた。
|
|
|
|
|
Name: T.K. ..かけだし(2,285ポイント)
Date: 2009/03/13(金) 16:59
No:30605
|
|
Title: Re:ビット演算
|
|
もうすでにたかぎさんが回答されているので恐縮ですが、
もう少し簡単そうに(ごつさをなくして)書きました。
たかぎさんの回答がベースです。
#include <iostream>
#include <bitset>
std::string
compl2(int decimal)
{
std::bitset<12> bs(~decimal + 1);
return bs.to_string();
}
int
main()
{
std::cout << compl2(123) << std::endl;
return 0;
}
VC++では通りますがBCCでは通りません。
書いておいてなんですが、conioさんの仰っている様な感じでシフト演算するのが
先生の期待している回答かもしれませんね。
186ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(88,407ポイント)
Date: 2009/03/13(金) 18:06
No:30608
|
|
Title: Re:ビット演算
|
|
> VC++では通りますがBCCでは通りません。
それは、
> return bs.to_string();
この部分に移植性がないからです。
移植性を持たせるには、
return bs.to_string<char, std::char_traits<char> >();
としなければなりません。
ところで、整数値のまま2の補数を求めてよいのであれば、
#include <iostream>
#include <bitset>
int main()
{
unsigned value;
std::cin >> value;
std::cout << std::bitset<12>(~value + 1) << std::endl;
return 0;
}
↑で十分ですね。
> シフト演算するのが
> 先生の期待している回答かもしれませんね。
それを質問内容から読み取るのは困難ですが、一般論で言えば、bitsetで済むものをわざわざスクラッチで実装する意味はありません。
自立処理系とかなら話は別ですが...。
234ポイント を手に入れた。
|
|
|
|
|
Name: T.K. ..入門者(2,606ポイント)
Date: 2009/03/13(金) 23:06
No:30643
|
|
Title: Re:ビット演算
|
|
>> たかぎさん
全て仰る通りだと思います。
移植性をなくしたのは故意です。テンプレート引数があるだけで読んで貰えなくなる
と思ったので削除して、注意としてコンパイラ依存であることを記しました。
学校の問題は現実の問題とはかけ離れているので混乱しますね。
自分がシフト演算がなんたら〜と書いたのは先生が10進数と2進数の変換を
手動(?)で体験させようとしているのではないかと推察したからです(体験に基づく)。
まあ結局のところ追加の情報が無いと意味のある議論はできませんね。
>> きいさん
学校のC(++)の授業で役立ちそうな参考書を紹介します。
ハッカーのたのしみ(エスアイビー・アクセス)
BINARY HACKS(オライリー)
きっと役に立つと思います。(2冊目は微妙かな?)
321ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(89,426ポイント)
Date: 2009/03/14(土) 00:09
No:30655
|
|
Title: Re:ビット演算
|
|
> 移植性をなくしたのは故意です。テンプレート引数があるだけで読んで貰えなくなる
> と思ったので削除して、注意としてコンパイラ依存であることを記しました。
std::bitset::to_stringは設計ミスですよね。
C++0Xでは、明示的にテンプレート実引数を指定しなくても大丈夫になるようです。
> 自分がシフト演算がなんたら〜と書いたのは先生が10進数と2進数の変換を
> 手動(?)で体験させようとしているのではないかと推察したからです(体験に基づく)。
まあ、そんな気はしますが...
それであれば、課題に明文化する必要がありますね。
あるいは、先生と学生・生徒との間に暗黙の了解があるのなら、きいさんが質問時にそれを補足する必要があります。
130ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,004,672ポイント)
Date: 2009/03/07(土) 21:59
No:30233
|
|
Title: ■お疲れ様でした!研究会無事終わりました■
|
|
3/7 第一回ソフトウェア技術研究会 [in大阪] 本日無事終わりました〜!
わざわざ遠くから、また、お忙しい中お越し頂きありがとうございました^^
大変興味深いお話を沢山聞かせていただきました。
また、質疑応答、討論の時間に積極的に発言して下さった方ありがとうございました。
研究会の様子と懇親会の様子を小さくアップします。
頂いたアンケートを元に次回はより良い開催が出来るよう努めていきたいと思います。
せっかく今までハンドルネームしか存じなかった方とリアルでお会い出来たのに、みなさんと充分お話できなかったのが残念です><
次回は今回あってないに等しかった交流時間などをもっと効率よく利用しようと思います。
皆さんまたお会いしましょう!そして今回残念ながら予定が合わなかった方、次回は是非よろしくお願いします^^
2倍のポイントを手に入れた! 746ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(68,938ポイント)
Date: 2009/03/07(土) 22:17
No:30236
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
今回参加してませんが、お疲れ様でした。
今回の研究会では何を話しているのかなーとか思いながら、仕事してました。
(実はまだ仕事中)
今回の研究会の様子を見て、有意義な時間で無事終わったようですね。
参加したいですねー。
次は予定が合うだろうか…。
# 次の作業は研究会ページでの成果報告などの掲載ですね。がんばってください。
101ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(37,039ポイント)
Date: 2009/03/07(土) 22:21
No:30237
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
今日はお疲れ様でした。
qさんの開発ソフトにおける要求抽出や集荷つについてのアドバイス、
Mistさんの組み込み系ソフトウエア業界の話、
たかぎさんの独立したいプログラマなど
学生としては大変貴重なお話を聞かせていただけました。
また私自身の研究テーマ(?)とは少し離れてますが、
パスカルさんのJava Scriptによるゲームプログラミングや
組木紙織さんのあたり判定や実数型から整数型への変換規則の話も
大変興味深いものでした。
RPGのバトルシーンの際、ダメージ計算にはほとんど実数型を使用し、
実際のダメージは整数型にしているものがほとんどだと思います。
(いま私が作っているのも計算式は実数型で、ダメージ量は整数型です)
なので、特に組木紙織さんの変換規則の話は大変参考になりました^^
また次回の開催、都合が合えば参加させていただきたいと思っています。
今日は本当にお疲れ様でした。
316ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,004,900ポイント)
Date: 2009/03/07(土) 22:25
No:30238
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>御津凪さん
ありがとうございます!
北海道で開催はちょっと難しいですがw もし近くで開催出来たらよろしくお願いします!
そしてお仕事お疲れ様です^^;
有意義な時間を過ごさせていただきました!
懇親会も楽しく盛り上げてくださり、開催前は色々気兼ねしましたが、開催して本当によかったです^^
是非次回も開催したいと思います。
次回は多分東京での開催となると思います。
# そうですね、でも明日自動車学校の卒業検定なんですよね^^; 帰ったら頑張って作りますw
プライバシー的な問題や、カメラ的な問題があり、
プレゼン資料と文章で、内容をお伝えするつもりです。
素材集めようと思ったんですが、いざ当日になってみると忙しかったり、気が回らなかったりして、
実は上の写真位しか素材が無いんですよね〜^^;
228ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,005,035ポイント)
Date: 2009/03/07(土) 22:32
No:30240
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>s-rushさん
今回はご参加ありがとうございました!
私も色んなお話が聞けてよかったです^^
懇親会は1時間ずつ座席チェンジでもしたらよかったですかね〜、
せっかく参加してくださったにも関わらず個人的にs-rushさんとお話する事が出来ず残念でした><
次回は是非よろしくお願いします!^^
135ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(37,144ポイント)
Date: 2009/03/07(土) 22:39
No:30241
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
私もqさんとお話しできず残念でした^^;
卒研のことも聞いてみたかったです・・・
(もしかして大学同じですかね^^)
次回の開催は東京で開かれるようなので、何とか参加したいです><
経済的に厳しいですが。
席替えの案、いいと思います。
129ポイント を落としてしまった。
|
|
|
|
|
Name: スー ..ぴよぴよ(801ポイント)
Date: 2009/03/07(土) 22:49
No:30243
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
皆さんお疲れ様でした。
為になるお話をたくさんして下さりありがとうございました。
懇親会は参加できなかったですが、次参加できる機会があれば是非懇親会も参加したいです。
今日は本当にお疲れ様でした。
84ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,005,136ポイント)
Date: 2009/03/07(土) 22:51
No:30244
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>s-rushさん
あれ、マジっすか?京都本学だけど滋賀にあるR大?
いや〜それなら研究室に遊びに来て下さいよw
卒論の事でも何でもお話しますから^^
・・といってもそろそろいなくなりますが^^;
あ〜・・思いで深い研究室とお別れってのは寂しいです・・。
101ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(37,198ポイント)
Date: 2009/03/07(土) 22:58
No:30248
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
mixiは招待されていないので、またメールさせていただきますね^^
大学内でご縁があれば、その時はよろしくお願いします。
45ポイント を手に入れた。
|
|
|
|
|
Name: OMA ..ぴよぴよ(130ポイント)
Date: 2009/03/07(土) 23:44
No:30250
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
お疲れ様でした〜
いいなぁ…僕も行ってみたかったんですけど場所が家から遠い上にテスト期間ということもあって行けなかったんですよ…
次は東京でやるなら絶対行きたいですね!というかやるならいつ頃ですか?すごい楽しみです!
13ポイント を手に入れた。
|
|
|
|
|
Name: lbfuvab ..上級者(18,739ポイント)
Date: 2009/03/08(日) 00:46
No:30252
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
私も参加したかったのですが、期末テストが・・・・orz
大阪に住んでいるので次に関西で開催される時は参加しようかなと思っています。
#ところで、高校生は参加して良いのでしょうか?
94ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(18,977ポイント)
Date: 2009/03/08(日) 01:19
No:30255
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>lbfuvabさん
>ところで、高校生は参加して良いのでしょうか?
ソフトウェア技術研究会の参加資格欄に「誰でも参加出来ます。」
とありますので、高校生でも大丈夫だと思いますよ^^
>>今回参加した皆様へ
皆様、発表会・懇親会お疲れ様でした。
一週間前までは行ける予定だったのですが、今回は都合で不参加になりました。
が、次回開催時日程が会えば関西でも関東でも出席したいですね〜。
結構人数いたみたいですね;
142ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(54,468ポイント)
Date: 2009/03/08(日) 10:34
No:30261
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
管理人さん、発表会の準備から取り仕切りまで全てやっていただきありがとうございました。
事前に練習していなかったのでグダグダの発表ですいませんでしたorz
しかも、めっちゃ時間使ってしまいましたし(つ-T;
JSは全く触ったことなかったのですが、パスカルさんの発表見ていてなかなか楽しそうだなと思いました。
機会があれば勉強してみたいと思います。
#飲み会に関係ない人が混じっていたのが笑えました(^w^
顔知らない人間ばっかで集まってるから仕方ないんですけど
2倍のポイントを手に入れた! 332ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,005,394ポイント)
Date: 2009/03/08(日) 13:09
No:30270
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>OMAさん
ありがとうございます^^
次回開催の際は是非よろしくお願いします!
次回の開催日程はちょっとまだ決められないんですよね。
というのも、私は4月から新生活が始まるので、どのような日程で予定を組んでいいものかさっぱりわからないのです;
ほかの方で誰か幹事をしてくださる方がいらっしゃればいいのですが、
今回のように、会場の手配や懇親会の予約、冊子作り・・色々一人でするとなると、
当日私が行かなかったらどうなるんだろうということになりますので^^;
大変自分中心で申し訳ないのですが、4月になって予定がわかりそうになったら・・ということにさせてください。
予定としては5月下旬〜6月上旬でしょうか。まだ決定ではありませんが。
是非機会がありましたらよろしくお願いします!
183ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,005,610ポイント)
Date: 2009/03/08(日) 13:12
No:30271
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>lbfuvabさん
ちょうど忙しい時期に予定を組んでしまいましたね^^;
大学受験のシーズンと重なって参加出来ないって方もいらっしゃいましたし・・。
しかし4月はまた忙しいし全員が予定合う日を設定するのも難しいですね;
もちろん高校生でも参加出来ます。中学生でも。
ただ、懇親会に参加される場合は合計の参加費が結構な額になるので、
ちょっと注意していただく必要があるかもしれません。
今回は全員大学生以上ということだったので、完全に一律にしましたが、
もし年齢にかなりばらつきがある時は学割的な設定も考えようと思います。
ちなみに今回は研究会参加費900円、懇親会参加費3200円でした。
次回はもう少し安くなると思います。
216ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,005,767ポイント)
Date: 2009/03/08(日) 13:16
No:30272
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>BEMANIさん
今回は残念でしたが、次回は是非!
今度はイラストの発表でもしてください(ぇ
おそらく開催地が変わるので多くのメンバーはガラっとまた新しく変わると思いますので、
また第一回みたいな雰囲気になると思いますので気兼ねなくw
今回肝心な司会が一番緊張してて進行が怪しかったので次回までに精神力鍛えておきます^^;
157ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,005,913ポイント)
Date: 2009/03/08(日) 13:19
No:30273
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>arrayさん
次回開催場所は余計に遠くなってしまいますね;
もし参加人数が集まりそうなら四国九州中国あたりからアクセスの良い場所で開催したいと思います!
龍神録の声優さんもその辺に住んでいらっしゃるので、彼女もきてくれるかな〜?
>たかぎさんの講演
残念ながら非公開となっていますが、
是非またたかぎさんが公演していただける機会があれば是非ご参加ください^^
146ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(86,630ポイント)
Date: 2009/03/08(日) 15:09
No:30275
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
> もちろん高校生でも参加出来ます。中学生でも。
> ただ、懇親会に参加される場合は合計の参加費が結構な額になるので、
> ちょっと注意していただく必要があるかもしれません。
金額以前に、居酒屋とかに中高生が行くと、何かと問題があるような気もします。
飲酒・喫煙や遅い時間になるのを避ければ法的には問題ありませんが、やめた方が無難でしょうね。
ファミレスぐらいならよいと思います。ただし、下手をすると居酒屋より高くつきます。
49ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,006,079ポイント)
Date: 2009/03/08(日) 19:25
No:30281
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>Mistさん
わざわざ遠くからご参加頂きありがとうございました!
また、ためになる興味深いお話をありがとうございました^^
>事前に練習していなかったのでグダグダの発表ですいませんでしたorz
とんでもないです!興味深く拝見させていただきました^^
私なんか散々練習したのにあの様でした〜^^;
きっと研究室の後輩は聞き飽きたことでしょう・・w
プレゼンについてはもっと勉強してきます!
>JSは全く触ったことなかったのですが、パスカルさんの発表見ていてなかなか楽しそうだなと思いました。
ですよね〜。遅い!ってイメージがあったのに、あれなら作ってみようかな?という気になりますね。
>#飲み会に関係ない人が混じっていたのが笑えました(^w^
いや〜確かに20人だと思ったのにおかしいと思ったんですよね〜^^;
fumiさんが、その紛れ込んでいる人、みたことないしってことでおかしいから試しにプログラムの話ふってみたら
「なんでこんな所で突然そんな話すんねん」みたいな返事返ってきたらしいです^^;
あの人突然いなくなってしまいましたね。
いや〜間違えたのは恥ずかしいかもしれませんが、会計の事もあるんだから間違えた事を伝えていなくなってほしかった・・。
166ポイント を手に入れた。
|
|
|
|
|
Name: pascal/koduki [URL] ..ぴよぴよ(77ポイント)
Date: 2009/03/09(月) 00:03
No:30290
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
お疲れ様でしたー。
C言語の話や、組込みの話、実際の仕事の話と、普段聞けない話がいろいろ聞けて楽しかったです。
飲み会に知らない人が混じってのは、ネタで言ってたら本当にそうでビックリですねw
私の発表は、グダグダ & 微妙に場違いの発表でしたが、楽しんでいただけたようなので何よりです。
研究会の感想の方はブログの方にまとめましたのでそちらでー。
77ポイント を手に入れた。
|
|
|
|
|
Name: fumi ..かけだし(1,082ポイント)
Date: 2009/03/09(月) 02:05
No:30295
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
幹事の皆様、講演してくださった方、昨日(日付的に一昨日ですが)はお疲れ様でしたm(_ _)m
みなさんの講演大変参考になりました。
特に、Mistさんや、たかぎさんのお話は学生の私にとって大変興味深い話でした。
>>pascal/kodukiさん
>私の発表は、グダグダ & 微妙に場違いの発表でしたが
そんなことないと思いますよ!
C以外の言語(スクリプト含めて)の話は個人的にはかなり興味がありましたし、良い情報が得られたなと
思っています。
Dixqさんへ
今回の勉強会で会議室での交流時間が少なかったのがちょっと残念でした。
講演の時間との兼ね合いだとは思いますが、改善の参考程度に…
関係ない人の件
笑えましたねw話が全然かみ合わなかったんでおかしいとは思ってたんですが…
288ポイント を手に入れた。
|
|
|
|
|
Name: 無題 ..ぴよぴよ(390ポイント)
Date: 2009/03/09(月) 10:53
No:30313
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
皆様、お疲れ様でした。
書き込んだことのない私が参加して大丈夫かな〜と
ビクビクしながらいきましたが、皆さん優しく
大変有意義な時間を過ごすことができました。
皆さんの発表&講演を聞き、自分の未熟さを痛感しました。
もっと勉強してきます(;;)。
次回も是非参加したいと思います。
皆様ありがとうございました。
159ポイント を手に入れた。
|
|
|
|
|
Name: いかり [URL] ..ぴよぴよ(204ポイント)
Date: 2009/03/09(月) 12:01
No:30320
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
こちらで書き込むのは初めてとなります。
先日、研究会に参加させて頂きました「いかり」です。
研究会、とても良かったです!
こういった場でないと聞けない話しが沢山聞けたので、
これから自分が勉強していく上での指針になると思います。
懇親会では私が最年少と言う事もあって少しビクビクしていたのですが、
fumiさんや院生の方々が話しかけて下さってのでホッとしました^^
また機会があれば宜しくお願いします。
204ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..初心者(8,644ポイント)
Date: 2009/03/09(月) 12:45
No:30323
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
事前に薄々分かっていたのですが、やはり自己紹介の所でしどろもどろになってしまいました…orz
そういえば研究会に出席した方々は大抵情報系か物理系の方々なんですよね…
パスカルさんの発表の中でC言語が苦手だからアウェーと言う表現が使われていましたが、私は研究会に出席した中で唯一化学系なので同じくアウェーに来てしまったようでした。
東京へは金沢駅からのアクセスが想像以上に悪いので(6時間位かかります)次回の東京会場での研究会は参加出来ないです…
見ず知らずの人々がHNで呼び合うと言う不思議な体験をさせて頂きました。
為になるお話ありがとうございましたm(_ _)m
皆さんと余り話す時間が無かったのは残念でした。
296ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(19,244ポイント)
Date: 2009/03/09(月) 16:53
No:30334
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>管理人さん
>今回は残念でしたが、次回は是非!
予定が合ってほしい限りです;
>今度はイラストの発表でもしてください(ぇ
咲夜さんのいらすとd・・・いや、やっぱり、
これは落ち着いた方がいいかと思いますよ^^;
>おそらく開催地が変わるので多くのメンバーはガラっとまた新しく変わると思いますので、
>また第一回みたいな雰囲気になると思いますので気兼ねなくw
>今回肝心な司会が一番緊張してて進行が怪しかったので次回までに精神力鍛えておきます^^;
緊張するのは仕方がないと思いますよ。
慣れてくれば大丈夫でしょう^^
その怪しい挙動もそれはそれで素晴らしいかと><
267ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,008,205ポイント)
Date: 2009/03/09(月) 22:12
No:30355
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>皆様
研究会が終わったらすぐに研究会HP更新しようと思ったのですが、思いのほか作業に時間がかかっています;
とりあえず当日あったことを全て文章化してるのですが、それだけでも相当時間がかかってます^^;
まだ募集してるようなおかしなことになってますが、明日位に一気に更新できたらと思ってます;
>>パスカル
オヌシはワイの記念品まで持って帰りおったの・・w
>>たかぎさん
パスカルの話は案外受けてよかったです。
STG制作が好きな方が多かったと思うので、弾幕にからめてくれたのがうまかったと思います^^
SEOもまた効率化を考えていくとドンドン深くなりそうですね〜。非常に興味あります!
>>fumiさん
当日は積極的に質疑応答など参加してくださりありがとうございました。
また懇親会では色々とお話も出来て感謝です^^
交流時間は完全に要改善ですね;
反省会でもそこはかなり出ました^^;
「さ〜交流して下さい」なんて無茶振り過ぎますね(汗 しかも時間が5分とか・・。
>>無題さん
ご参加頂きありがとうございました^^
また無題さんとは会合ではあまりお話できませんでしたが、最後の電車でお話できてよかったです^^
後、「技術があること」より「興味があること」の方が数段大事だと思いますし、
後者さえあれば前者は後から付いてくると思います。
私は中々ついてきていませんが!モチベーションだけでなんとか保ってきましたw
>>いかりさん
研究会・懇親会とご参加頂きありがとうございました。
若い内からから積極的に研究会や勉強会のような会合に参加されることは素晴らしいことだと思います。
他の研究会の事はよくわかりませんが、もし、まだ他の会合に参加されていない場合は、これを気に参加してみてはいかがでしょう?
3年生になれば研究室配属も決まってくると思いますし、自分の研究したい分野がもし決まっていなければ
何か新たな発見があるかもしれませんね!
>>cosmoさん
個人的にお話する機会が無く本当にすみませんでした><
やはりワイワイ話すのは懇親会でという流れになると思ったので交流時間という時間を事前に設けようと思ったのですが、
ちょっと計画性が無く、交流時間でワイワイは難しかったです(汗
あの謎の時間をなんとかしないといけませんね^^;
当日は遠くからお越しいただいたにもかかわらず、全体的なお話しかさせていただくことが出来ず本当に申し訳ありませんでした;
私もこういう会の幹事はしたことがなく、第一回ということで何をしたらいいかよくわからないことが多く、
今回反省すべき点・改善すべき点が山のようにありました^^;
次回以降気をつけていこうとおもいますので、また機会がありましたらよろしくお願いします!
次関西で開催する時は京都あたりにしましょうか^^;
>>BEMANIさん
おぉ、そのイラスト持参してくれたら無条件でベストプレゼンテーション者に認定しますよb(嘘
しかしプログラムも音楽も、絵も出来るBEMANIさんなら二代目ZUNさんとして認められそうですw
才能を開花させるコツというテーマで次回お願いします♪
1,209ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(86,920ポイント)
Date: 2009/03/10(火) 13:33
No:30379
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
> STG制作が好きな方が多かったと思うので、弾幕にからめてくれたのがうまかったと思います^^
> SEOもまた効率化を考えていくとドンドン深くなりそうですね〜。非常に興味あります!
さすがにSEOの話に弾幕を絡めるのは無理ですけどね。
26ポイント を手に入れた。
|
|
|
|
|
Name: やそ ..比類無きプログラマー(88,330ポイント)
Date: 2009/03/12(木) 20:35
No:30546
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
みなさんお疲れ様でした。
今回は大阪開催だったので、見送らせていただきました。
東京近郊で開催があったときには参加してみたいなぁ^^
46ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,010,311ポイント)
Date: 2009/03/13(金) 23:55
No:30653
|
|
Title: Re:■お疲れ様でした!研究会無事終わりました■
|
|
>>やそさん
ありがとうございます!
この掲示板を明るく盛り上げてくださるやそさんには是非ともご参加頂きたいなと思っておりました^^
機会がありましたら是非お願いします☆
>>kazuoniさん
是非次の機会によろしくお願いします^^
で、資料ですが、すみません!;
なかなか学年末で忙しくしていて、アップロード出来るような資料が完成しないでいます><;
なるべく急いで仕上げますので、少々お待ち下さい(汗
178ポイント を手に入れた。
|
|
|
|
Name: s-rush ..プログラマー(38,411ポイント)
Date: 2009/03/12(木) 18:59
No:30537
|
|
Title: アニメーション
|
|
度々すいません。
ゲームにはオープニング等で、よくアニメーションを表示させると思います。
そのオープニングを出すプログラムはできたのですが、
そのムービー(ではないですが)をスキップさせることができません。
#include "DxLib.h"
void opening()
{
int op_img[115];
char path[64];
int i;
/*アニメーション動画のロード*/
for(i=0; i<115; i++)
{
sprintf(path, "../data/img/opening/op_%03d.png", i);
op_img[i] = LoadGraph(path);
}
/*アニメーション再生*/
for(i=0; i<115; i++)
{
for(int j=0; j<10; j++){
//DrawGraph(0, 0, op_img[i], TRUE);
ScreenFlip();
wait_fanc();
if(Key[KEY_INPUT_Z] >= 1){
goto EXIT;
}
}
}
EXIT:
func_state = 2;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; //ウィンドウモードにする。
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll_2( Key ) && !Key[KEY_INPUT_ESCAPE]){//メインループ
switch(func_state){
/*ゲーム機動時のステータス*/
case 0:
load();
load_kanto();
ch.x =16*32;
ch.y =60*32;
ch.walking_flag=0;
ch.muki=3;
func_state=1;
break;
/*オープニング*/
case 1:
opening();
break;
/*オープニングセレクト*/
case 2:
op_select();
SetDrawBright(255,255,255); //輝度値のリセット break;
/*マップ上のステータス*/
case 100:
(省略)
if(func_state!=0 && func_state!=1 && func_state!=2)
sound();
ScreenFlip();//裏画面反映
wait_fanc();//リフレッシュレートを60に
}
DxLib_End();//DXライブラリ終了処理
return 0;
}
開発環境はVC++ 2008 EEです。
632ポイント を手に入れた。
|
|
|
|
Name: 朽木 ..かけだし(2,007ポイント)
Date: 2009/03/12(木) 19:04
No:30538
|
|
Title: Re:アニメーション
|
|
キー入力待機はしてますか?
してたらごめんなさい。@@;
2倍のポイントを手に入れた! 66ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(38,737ポイント)
Date: 2009/03/12(木) 19:05
No:30539
|
|
Title: Re:アニメーション
|
|
-追記-
必要な部分だけを抜粋してコピペしたので、少し不十分なところがあるかもしれませんが、
関係する部分はopeping()関数内だと思います。
アニメと同じように複数の画像を連続させてアニメーションを表示する方法にしています。
Zキーが入力されたら、for文を抜け出してEXITラベルにジャンプするようにしているのですが、
キー入力をしてもアニメーションがスキップできません。
デバッグでブレイクポイントを作ってもキー入力を認識していないようでした。
おそらく高速で処理されているからだとは思うのですが・・・
アニメーションも最初は表示が速すぎて画面上に現れなかったので。
短期間に連続で質問して申し訳ないですが、アドバイスお願いします。
326ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(70,051ポイント)
Date: 2009/03/12(木) 19:27
No:30540
|
|
Title: Re:アニメーション
|
|
メインループの処理である、
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll_2( Key ) && !Key[KEY_INPUT_ESCAPE]){//メインループ
を実行されていないのが原因です。
特に、 GetHitKeyStateAll_2( Key ) でキー入力を更新していないので、入力を受け付けません。
(このため、起動直後にZキーを押しっぱなしにするとスキップされるはずです)
108ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(21,067ポイント)
Date: 2009/03/12(木) 19:41
No:30541
|
|
Title: Re:アニメーション
|
|
>>s-rushさん
opning関数が呼ばれますが、
この関数を抜けるまでにキー情報が更新されていないっぽいです。
アニメーション処理の中にキー情報を更新する関数を入れてみては如何でしょうか。
また、Zが押されない場合(完全にアニメーションが終わった状態)、
func_stateが2になっていないように見えるので
opning関数が終わった後にでもfunc_stateが2になるようにしておけばいいと思います。
(既にどこかでやっているならごめんなさい。)
149ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(7,943ポイント)
Date: 2009/03/12(木) 19:47
No:30542
|
|
Title: Re:アニメーション
|
|
// 不安定にさせない為に長期ループ内には入れておいた方が良い
ProcessMessage() ;
// キーバッファの取得
GetHitKeyStateAll_2( Key ) ;
// 入力判定
if( Key[KEY_INPUT_Z] >= 1 ){
goto EXIT ;
}
;
入力判定のところでプロセスとキー取得を
行えば大丈夫だと思いますよ。
64ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(38,959ポイント)
Date: 2009/03/12(木) 21:17
No:30549
|
|
Title: Re:アニメーション
|
|
御津凪さん、BEMANIさん、SooAさん、
お早い回答ありがとうございました。
おかげさまで無事スキップすることができました。
(case 2での処理で少し影響を受けてしまいましたが^^;)
もう一点だけお聞きしたいのですが・・・
音楽をメモリに読み込んで音を流すことは当り前のように使用しているのですが、
ふつうは0秒から再生されますよね?
これを指定した時刻から再生することって可能なんでしょうか?
たとえば、
オープニングアニメーションと同時に音楽再生。
Zキー入力後、アニメーションのスキップかつ、音楽(データ)20秒後からの再生
というように。
リファレンスを見たところ、そのような関数がなかったので。
222ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(39,105ポイント)
Date: 2009/03/12(木) 21:48
No:30551
| 解決!
|
Title: Re:アニメーション
|
|
yuさん、さっそくの回答ありがとうございます。
>>圧縮形式の場合は正しく設定されない場合があるそうです。
おっしゃる通り、正しく設定できないようでしたorz
SetSoundCurrentTimeで12秒後から
という設定をしたのですが、またはじめから再生するという形になってしまいます。
データ容量がかさみますが、無圧縮の音楽に変えて再度挑戦してみます。
-追記-
一番お聞きしたかったことが解決できたので、解決ボタンを押しておきます。
146ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(7,887ポイント)
Date: 2009/03/12(木) 22:00
No:30552
|
|
Title: Re:アニメーション
|
|
SetSoundCurrentTime() は PlaySoundMem() より前か後どちらに記述しました?
試してないので憶測ですみませんが、
ChangeVolumeSoundMem()等は再生後に記述しないと
効果が出ないので一応試してみてください。
56ポイント を落としてしまった。
|
|
|
|
|
Name: yu [URL] ..上級者(19,712ポイント)
Date: 2009/03/12(木) 22:03
No:30553
|
|
Title: Re:アニメーション
|
|
すみません、変なこと書いてました;
編集で以前の記事は消させて頂きました。
推測ですが、
PlaySoundMem()関数の第三引数にFALSEが入力されていますか?
PlaySoundMem(handle,PLAYTYPE,FALSE)
されていたらすみませんm(_ _;)m
159ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(39,235ポイント)
Date: 2009/03/12(木) 22:07
No:30554
|
|
Title: Re:アニメーション
|
|
PlaySoundMem()よりも後です。
流れ的には
LoadSoundMem()で音楽ロード
↓
PlaySoundMem()で音楽再生
↓
Zキー入力されたらSetSoundCurrentTime()で設定
↓
関数を抜ける前にStopSoundMem()
という感じです。
音楽データの形式はmp3なのですが、だめなのですかねぇ・・・
(SetLoopPosSoundMemで、ループ指定はできました)
130ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(19,950ポイント)
Date: 2009/03/12(木) 22:17
No:30556
|
|
Title: Re:アニメーション
|
|
すみません、あいまいなのですが、
StopSoundMem()関数等で音楽を止めている、または再生前
じゃないと設定できなかったような?・・・
↑間違いです。すみませんm(_ _;)m
流れ的には
StopSoundMem(handle);//今まで流れていた音楽を止める
SetSoundCurrentTime(time,handle);//再生位置セット
PlaySoundMem(handle,PLAYTYPE,FALSE);//先頭から再生するフラグをオフにして、再生開始
ですかね?
うまくいくかな・・・
238ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(39,494ポイント)
Date: 2009/03/12(木) 22:26
No:30557
|
|
Title: Re:アニメーション
|
|
>>流れ的には
>>StopSoundMem(handle);//今まで流れていた音楽を止める
>>SetSoundCurrentTime(time,handle);//再生位置セット
>>PlaySoundMem(handle,PLAYTYPE,FALSE);//先頭から再生するフラグをオフにして、再生開始
私もそう思い、StopSoundMem()で一時停止したり、
考えられる順番をすべて試してみたのですが、だめでした。
PlaySoundMemって第3引数ってあるんですね。
今まで知りませんでした。
FALSEで指定(?)すると、StopSoundMem()で一時停止した場所から再生されました。
259ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(20,194ポイント)
Date: 2009/03/12(木) 22:28
No:30558
|
|
Title: Re:アニメーション
|
|
すみませんorz
やはりあいまいでした。
SetSoundCurrentTime(time,handle);//再生位置セット
PlaySoundMem(handle,PLAYTYPE,FALSE);//先頭から再生するフラグをオフにして、再生開始
だけで大丈夫でした。
再生中でも設定できました。
(でも結局は前に鳴っていた音楽が重複するので止めないとけませんが)
もう少し調べてから書き込むようにします。すみません orz
ちなみに自分はoggファイルを使用しているのですが、しっかりと設定されています。
ですが、SetCreateSoundDataType()関数でDX_SOUNDDATATYPE_MEMNOPRESS以外を
設定すると正常に設定されませんでした。
# mp3でも正常に動作しました
244ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(39,563ポイント)
Date: 2009/03/12(木) 22:44
No:30559
|
|
Title: Re:アニメーション
|
|
やっぱり、設定できてないようです・・・
SetSoundCurrentTimeの使い方が間違っているのでしょうか?
もう一度コードをアップします。
void opening()
{
int op_img[115];
int op_music;
char path[64];
int i;
/*アニメーション動画のロード*/
for(i=0; i<115; i++)
{
sprintf(path, "../data/img/opening/op_%03d.png", i);
op_img[i] = LoadGraph(path);
}
op_music = LoadSoundMem("../data/img/opening/op_music.mp3");
/*アニメーション再生*/
PlaySoundMem(op_music, DX_PLAYTYPE_LOOP);
for(i=0; i<115; i++)
{
for(int j=0; j<6; j++){
// 不安定にさせない為に長期ループ内には入れておいた方が良い
ProcessMessage() ;
// キーバッファの取得
GetHitKeyStateAll_2( Key ) ;
DrawRotaGraph2(0, 0, 0 , 0 , 2.66 , 0 , op_img[i] , FALSE ) ;
ScreenFlip();
wait_fanc();
if(Key[KEY_INPUT_Z] == 1){
StopSoundMem(op_music);
SetSoundCurrentTime(12280, op_music);
PlaySoundMem(op_music, DX_PLAYTYPE_LOOP, FALSE);
goto EXIT;
}
}
}
EXIT:
StopSoundMem(op_music);
func_state = 2;
}
69ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(8,088ポイント)
Date: 2009/03/12(木) 22:52
No:30560
|
|
Title: Re:アニメーション
|
|
Z キーが押されたらOpeningをスキップして
抜けた先で指定秒から再生するんですよね?
wait_fanc();
if(Key[KEY_INPUT_Z] == 1){
StopSoundMem(op_music);
goto EXIT;
}
}
}
StopSoundMem(op_music);
EXIT:
SetSoundCurrentTime(12280, op_music);
PlaySoundMem(op_music, DX_PLAYTYPE_LOOP, FALSE);
func_state = 2;
}
じゃないですか?
201ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(20,248ポイント)
Date: 2009/03/12(木) 22:57
No:30561
|
|
Title: Re:アニメーション
|
|
自分はgotoの使い方が良く分かりませんが
音楽が再生されてすぐに消されている気がします。
話が変わりますが
gotoってあまり使うのは良くないって聞いたのですが何故でしょうか・・・
バグが発生しやすいのでしょうか?
54ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..比類無きプログラマー(70,352ポイント)
Date: 2009/03/12(木) 23:09
No:30562
|
|
Title: Re:アニメーション
|
|
> というよりgotoってあまり使うのは良くないって聞いたのですが
無闇に使うと処理を追いづらくなるから、という理由で私は考えています。
(といいながら自分のソースでは使ってます)
ちなみに、上記のコードで goto を使わない場合は、
if(Key[KEY_INPUT_Z] == 1){
StopSoundMem(op_music);
SetSoundCurrentTime(12280, op_music);
PlaySoundMem(op_music, DX_PLAYTYPE_LOOP, FALSE);
i = 115; // 外側のループは最大値に設定することで抜ける
break; // 内側のループは break で抜ける
}
}
}
//EXIT: // 不要
StopSoundMem(op_music);
func_state = 2;
}
とすることで可能です。
301ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(39,776ポイント)
Date: 2009/03/12(木) 23:10
No:30564
|
|
Title: Re:アニメーション
|
|
>>SooAさん
処理的には同じではないでしょか?
EXITラベル以下の処理は、Zキーが押されようが押されまいが実行されるはずです。
Zキーが入力されれば、for文を抜け出るというだけなので・・・
ちなみに教えていただいたコードに書きなおしても正しく設定されませんでした。
>>yuさん
>音楽が再生されてすぐに消されている気がします。
どこで消されているのでしょうか?
goto文・・・
私もどこかであまり使わない方が良いって聞いたような気がします^^;
213ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(20,576ポイント)
Date: 2009/03/12(木) 23:13
No:30565
|
|
Title: Re:アニメーション
|
|
PlaySoundMem(op_music, DX_PLAYTYPE_LOOP);
for(i=0; i<115; i++)
{
for(int j=0; j<6; j++){
// 不安定にさせない為に長期ループ内には入れておいた方が良い
ProcessMessage() ;
// キーバッファの取得
GetHitKeyStateAll_2( Key ) ;
DrawRotaGraph2(0, 0, 0 , 0 , 2.66 , 0 , op_img[i] , FALSE ) ;
ScreenFlip();
wait_fanc();
if(Key[KEY_INPUT_Z] == 1){
StopSoundMem(op_music);
SetSoundCurrentTime(12280, op_music);
PlaySoundMem(op_music, DX_PLAYTYPE_LOOP, FALSE);
goto EXIT;
}
}
}
EXIT:
StopSoundMem(op_music);//←ここです
func_state = 2;
}
すみません、消されているではなく
止められているですね;
>>御津凪様
確かに処理を行き成り飛ばされたら分かり難くなりますね・・・
(有効な場合もありそうですが)
わざわざお教え頂き、ありがとうございますm(_ _)m
328ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(39,801ポイント)
Date: 2009/03/12(木) 23:15
No:30566
|
|
Title: Re:アニメーション
|
|
>>御津凪さん
>無闇に使うと処理を追いづらくなるから、という理由で私は考えています。
確かに無闇やたらと使うと後々面倒になりそうですね^^;
i=115;を入れてbreakするコードに書きなおしておきます^^
25ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(8,103ポイント)
Date: 2009/03/12(木) 23:16
No:30567
|
|
Title: Re:アニメーション
|
|
>gotoってあまり使うのは良くないって聞いたのですが何故でしょうか・・・
様々な処理をすっ飛ばして命令位置を変えるので
プログラムの流れを歪めてしまいます。
流れを無理やり変えるのでバグが発生しやすくなり
バグのが発生した際には処理位置が流れに沿っていないため
探すのも困難になるといった状態になる場合があります。
なので使わないプログラムを書けるようになった方が良いです。
15ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(20,714ポイント)
Date: 2009/03/12(木) 23:32
No:30568
|
|
Title: Re:アニメーション
|
|
>>SooA様
確かにデバッグがきつくなってしまいますね・・・
参考書には、あまり多用するな!
としか書いてなくて、理由が無かったものですから知らなかったです。
そういえばgoto文の説明すらありませんでした。
今日でどういうものか分かりました。
ありがとうございました。m(_ _)m
138ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(40,041ポイント)
Date: 2009/03/12(木) 23:33
No:30569
|
|
Title: Re:アニメーション
|
|
EXIT:
StopSoundMem(op_music);//←ここです
func_state = 2;
}
コメントアウトしていたのに、何かの拍子で消してしまってるorz
ここを削除しても、結果は同じでした。
>>SooAさん
おっしゃる通り、goto文を使わないプログラムを書けるように勉強します。
2倍のポイントを手に入れた! 240ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(21,312ポイント)
Date: 2009/03/12(木) 23:50
No:30571
|
|
Title: Re:アニメーション
|
|
void opening()
{
int op_img[115];
int op_music;
char path[64];
int i;
/*アニメーション動画のロード*/
for(i=0; i<115; i++)
{
sprintf(path, "../data/img/opening/op_%03d.png", i);
op_img[i] = LoadGraph(path);
}
op_music = LoadSoundMem("../data/img/opening/op_music.mp3");
SetLoopPosSoundMem(0, op_music);//ループ位置セット(←追加したらどうなりますか?)
/*アニメーション再生*/
PlaySoundMem(op_music, DX_PLAYTYPE_LOOP);
for(i=0; i<115; i++)
{
for(int j=0; j<6; j++){
// 不安定にさせない為に長期ループ内には入れておいた方が良い
ProcessMessage() ;
// キーバッファの取得
GetHitKeyStateAll_2( Key ) ;
DrawRotaGraph2(0, 0, 0 , 0 , 2.66 , 0 , op_img[i] , FALSE ) ;
ScreenFlip();
wait_fanc();
if(Key[KEY_INPUT_Z] == 1){
StopSoundMem(op_music);
SetSoundCurrentTime(12280, op_music);
PlaySoundMem(op_music, DX_PLAYTYPE_LOOP, FALSE);
goto EXIT;
}
}
}
EXIT:
func_state = 2;
}
598ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(8,250ポイント)
Date: 2009/03/12(木) 23:55
No:30572
|
|
Title: Re:アニメーション
|
|
>処理的には同じではないでしょか?
Opening が終わるか Zキーで抜けると再生位置が変わる。
という風に解釈しました。
最初の状態ですと Z キーが押された時だけ再生位置が変わります。
if(Key[KEY_INPUT_Z] == 1){
i = 115 ;
break ;
}
}
}
StopSoundMem(op_music);
SetSoundCurrentTime(12280, op_music);
PlaySoundMem(op_music, DX_PLAYTYPE_LOOP, FALSE);
func_state = 2;
}
処理的には問題ないと思うのですが、
これで再生位置が変わらないと言うことは、
何か他に原因があるのかもしれません。
読み込んでいないグラフィックを
DeleteGraph()してたらループ再生しなくて
悩んだことがあります。
直接プログラムに組み込むのではなく
テスト用のプロジェクト作ったほうが良さそうです。
上記のような場合の確認にもなるので。
147ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(40,393ポイント)
Date: 2009/03/12(木) 23:55
No:30573
|
|
Title: Re:アニメーション
|
|
何も変わらず
for(i=0; i<115; i++)
{
for(int j=0; j<6; j++){
// 不安定にさせない為に長期ループ内には入れておいた方が良い
ProcessMessage() ;
// キーバッファの取得
GetHitKeyStateAll_2( Key ) ;
DrawRotaGraph2(0, 0, 0 , 0 , 2.66 , 0 , op_img[i] , FALSE ) ;
ScreenFlip();
wait_fanc();
if(Key[KEY_INPUT_Z] == 1){
StopSoundMem(op_music);
SetSoundCurrentTime(12280, op_music);
PlaySoundMem(op_music, DX_PLAYTYPE_LOOP, FALSE);
goto EXIT;
}
}
}
赤字のStopSoundMemで停止されたところから再び再生されています。
352ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(21,427ポイント)
Date: 2009/03/13(金) 00:03
No:30574
|
|
Title: Re:アニメーション
|
|
う〜ん・・・
すみませんが、自分では今のs-rush様のコードは
合っているような気がします・・・
SooA様が仰るように
小さなプログラムで動作を確認したほうが良いかもしれません;
現在のプロジェクトをあげて貰えるのなら原因がわかるかもしれませんが
(かと言って自分はそこまでプログラムに詳しく無いのでわからないかもしれませんがorz)
自分が小さなミスを逃していそうで怖いです
115ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(40,504ポイント)
Date: 2009/03/13(金) 00:10
No:30575
|
|
Title: Re:アニメーション
|
|
いつも新しいシステムを組み込むときは、
不必要な部分をコメントアウトするか、小さなプロジェクトで動作確認しています。
(今回のは前者の方です)
一度、新たに小さなプロジェクトを作って動作確認をしてみます。
>>自分が小さなミスを逃していそうで怖いです
大学の研修課題でそういうことがありました^^;
原因は定義外のメモリアクセスで、3日間悩んでました(笑
もしかして、今回も同じパターン??
111ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(8,333ポイント)
Date: 2009/03/13(金) 00:35
No:30577
|
|
Title: Re:アニメーション
|
|
訂正と追記
訂正
>DeleteGraph()してたらループ再生しなくて
正しくは巻き戻り位置指定のループ再生。
追記
DXライブラリの修正版(テスト版?)は入れらてます?
入ってる場合は2.25を入ってない場合は修正版を
試してみてください。
何も変わらないかもしれませんが…。
83ポイント を手に入れた。
|
|
|
|
|
Name: 朽木 ..かけだし(2,062ポイント)
Date: 2009/03/13(金) 00:53
No:30578
|
|
Title: Re:アニメーション
|
|
goto を使わないのは、「美しくないから」と「読む人が追いにくいから」だと思います。
用いるべき、いや、私もあんまり好きじゃないんですけど、そういう時、例えば
/* 条件式が成り立つ間、ループを継続する */
while ( 条件式 )
{
/* 値で、条件分岐 */
switch( 値 )
{
case 0:
/* while文を抜けるための処理 */
default:
/* 前のcaseのどの値でもなかった場合の処理 */
}
}
上記のような時に、case 0 で while文 を抜ける処理を書くときに、そのまま break と書くと、
ご想像の通り switch文 を抜ける意味になってしまう訳で、
解決方法として、 Exit用のFlag を作って、 switch文 の直後に if文 を挿入して break する方法もありますが、
goto文 を使うと、 while文 の直後にラベルを挿入して、goto ラベル名 とするだけでできます。
フラグを使うときと比べ、プログラムする人が意識するべき変数の数を減らすことができるので、
ミスを少なくする事が期待(あくまで)できますが、
他の方の言う通り、使いすぎると逆に分からなくなるので多用しない方が良いです。
goto文 を使うなんてC言語を扱う人として恥ずかしい(同日01:05 赤字変更)ということではなく、
経験者が教えるときにそういう事を言って食わず嫌いになっているだけではないかと。
というか、考えてみれば break や continue も吐いてしまえば同じような気がするんですが
どうなんでしょう?@@?←ごめんなさい。話がそれてしまうので、ナシで
55ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(8,443ポイント)
Date: 2009/03/13(金) 02:02
No:30579
|
|
Title: Re:アニメーション
|
|
/* 条件式が成り立つ間、ループを継続する */
while ( 条件式 ) {
/* 値で条件分岐 */
if( 値 == 0 ) /* while文を抜けるための処理 */
break ;
switch( 値 ) {
case 1:
break;
case 2:
break;
default:
break;
}
}
switch文で全てを処理する必要はありません、
状況に合わせて条件分岐を使い分ければ良い。
110ポイント を手に入れた。
|
|
|
|
|
Name: 朽木 ..かけだし(2,078ポイント)
Date: 2009/03/13(金) 02:45
No:30580
|
|
Title: Re:アニメーション
|
|
あ。@@;;
全然説明になってないですね…ごめんなさい。
言い訳(ぁ:case 0 で while文 を抜ける処理を書くときに
16ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..上級者(15,214ポイント)
Date: 2009/03/13(金) 02:47
No:30581
|
|
Title: Re:アニメーション
|
|
なぜ突然にgoto論議が始まったのか甚だ疑問ではありますが・・・
朽木さん
>上記のような時に、case 0 で while文 を抜ける処理を書くときに、
SooAさん
>状況に合わせて条件分岐を使い分ければ良い。
何のための「while ( 条件式 )」なのでしょう。
抜ける前に必ず何か処理を行う必要があるなら仕方ないでしょう。
しかし、途中でループを抜けること自体に抵抗がないのはおかしいですね。
本題から外れていますが、この辺は糖衣構文としての敷居やコーディングスタイルが絡むので、結局人それぞれかと(笑)
151ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(8,690ポイント)
Date: 2009/03/13(金) 02:49
No:30582
|
|
Title: Re:アニメーション
|
|
自分のがひと段落付いたので試してみたのですが、
こちらでも再生→停止→指定位置から再生
が出来ませんでした。
そこで最終手段?として一度メモリを開放して
呼び直す事で一応途中再生可能になりました。
以下の流れでテスト
MHandle = LoadSoundMem( "omoide.mp3" ) ;
PlaySoundMem( MHandle, DX_PLAYTYPE_LOOP ) ;
StopSoundMem( MHandle ) ;
DeleteSoundMem( MHandle ) ;
MHandle = LoadSoundMem( "omoide.mp3" ) ;
SetSoundCurrentTime( 20000, MHandle ) ;
PlaySoundMem( MHandle, DX_PLAYTYPE_LOOP, FALSE ) ;
247ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(8,765ポイント)
Date: 2009/03/13(金) 03:14
No:30583
|
|
Title: Re:アニメーション
|
|
>しかし、途中でループを抜けること自体に抵抗がないのはおかしいですね。
最初の条件がおかしいですからね。
多くの可能性を考えてあえてああしたので
気になさらなくても大丈夫ですよ。^^;
75ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..上級者(15,143ポイント)
Date: 2009/03/13(金) 03:25
No:30584
|
|
Title: Re:アニメーション
|
|
ところで本題についてですが、これはMP3(圧縮フォーマット)特有の現象なんでしょうか?
自分も時間があれば試してみたいのですが、上を見てみると、どうもDXライブラリの仕様っぽいですね。
71ポイント を落としてしまった。
|
|
|
|
|
Name: SooA [URL] ..初心者(8,847ポイント)
Date: 2009/03/13(金) 03:57
No:30587
|
|
Title: Re:アニメーション
|
|
>どうもDXライブラリの仕様っぽいですね。
不具合っぽいですね〜。
mp3, ogg, wav 全てダメでした。
最初の再生を行う前にしか反応してないようです。
リファレンスに載せていない関数なので
修正は期待できないかな?><;
82ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..上級者(15,245ポイント)
Date: 2009/03/13(金) 04:03
No:30588
|
|
Title: Re:アニメーション
|
|
あれ、wavもできないんですか・・・そうすると、途中再生の機能自体、ちょっと癖があるようですね。
非公開ということは、テスト段階の実装でしょう。修正は・・・どうでしょうね(笑)
55ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(21,175ポイント)
Date: 2009/03/13(金) 08:11
No:30591
|
|
Title: Re:アニメーション
|
|
>>s-rushさん
もし、参考になるのであれば見てみてください。
ttp://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=925
↑グーグルで検索かけて見つけてきたURLですが、すでに試されているのならすいません。
108ポイント を手に入れた。
|
|
|
|
|
Name: yu [URL] ..上級者(21,771ポイント)
Date: 2009/03/13(金) 10:34
No:30593
|
|
Title: Re:アニメーション
|
|
自分はmp3,ogg,wavの3つとも正常に動作しました。
StopSoundMem(handle);//今まで流れていた音楽を止める
SetSoundCurrentTime(time,handle);//再生位置セット
PlaySoundMem(handle,PLAYTYPE,FALSE);//先頭から再生するフラグをオフにして、再生開始
上記の流れでできたのですが、
下記でも設定できたのは何故?・・・
BEMANI様のURLを見ましたが、止めていないと設定できないようですね。ですが、できました。
PlaySoundMem(handle,PLAYTYPE);
SetSoundCurrentTime(time,handle);//再生位置セット
StopSoundMem(handle);//今まで流れていた音楽を止める
PlaySoundMem(handle,PLAYTYPE,FALSE);//先頭から再生するフラグをオフにして、再生開始
これでも設定した位置から再生されました;
DXライブラリのバージョンは2.24cでした。
gotoの発端は自分です。話を逸らせてしまいすみませんでした。orz
#バージョン2.25bでも正常に動作しました。
344ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(40,753ポイント)
Date: 2009/03/13(金) 11:52
No:30595
|
|
Title: Re:アニメーション
|
|
>>SooAさん
教えていただいたように一度メモリを解放してもやはり指定した時間から再生されませんでしたorz
DXライブラリも修正バージョンに入れ直したのですが。
>>SCIさん
DXライブラリの仕様なんですかね??
修正してほしいところです><
>>BEMANIさん
わざわざ探してくださってありがとうございます。
教えていただいたサイトを参考にして、SetSoundCurrentTimeの位置を
いろいろと変えて実行してみたのですが、やはり改善はされませんでした。
>>yuさん
>自分はmp3,ogg,wavの3つとも正常に動作しました。
私は3つとも正常に動作しませんでしたorz
OSがVistaっていうのも関係あるのでしょうか?
Vistaだとプログラムが正常に動作しないこともあるとか何とかで、
嫌う人がすごく多いとどこかで聞いたことがあります・・・
249ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(8,710ポイント)
Date: 2009/03/13(金) 17:23
No:30606
|
|
Title: Re:アニメーション
|
|
う〜ん、環境に大きく作用されているみたいですね。
後は音楽ファイルそのものを別けるくらいしか
案が浮かびません。
1.OP_A.mp3、OP_B.mp3 二つの音楽ファイルを用意して
最初に読み込んでおく。
2.OP中は A を再生、
3.OPが終わるか、キーが押されたら Aを停止させて B を再生
音の繋がり、その後のループ問題が有るので
場合によっては良い方法ではありませんが。
137ポイント を落としてしまった。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(41,068ポイント)
Date: 2009/03/13(金) 17:32
No:30607
| 解決!
|
Title: Re:アニメーション
|
|
>>音の繋がり、その後のループ問題が有るので
>>場合によっては良い方法ではありませんが。
そのあたりは何とかしてみます。
どうしてもできそうにもないので、音楽ファイルそのものを2つ用意して実装してみようと思います。
回答してくださった皆さん、ありがとうございました。
130ポイント を手に入れた。
|
|
|
|
|
Name: 朽木 ..かけだし(1,804ポイント)
Date: 2009/03/13(金) 20:37
No:30612
|
|
Title: Re:アニメーション
|
|
抵抗がなければ、irrKlang というものをおすすめします。@@;
wav、ogg、mp3が再生できます。他にもありますが、使うことはないかと。
Ambiera - irrKlang
ttp://www.ambiera.com/irrklang/
使い勝手はこんな感じです。色々遊べます。
irrklang::ISoundEngine* SoundEngine = irrklang::createIrrKlangDevice(); /* 初期化 */
irrklang::ISound* BackMusic = SoundEngine->play2D("MusicFile.mp3"); /* 再生 */
if ( BackMusic == NULL )
/* エラー処理 */
BackMusic->setVolume(0.5); /* 音量を半分に */
BackMusic->setPosition(BackMusic->getPosition() + 1000); /* 1秒後へ移動(再生中問わず) */
BackMusic->setPlaybackSpeed(2.0); /* 再生速度を倍に */
while ( BackMusic->isFinished() == false ); /* 再生が終了するまで待機 */
BackMusic->stopAllSounds(); /* 再生中のサウンドを全て停止 */
SoundEngine->drop(); /* drop */
274ポイント を落としてしまった。
|
|
|
|
Name: けんたろうちゃん ..かけだし(2,421ポイント)
Date: 2009/03/13(金) 18:28
No:30609
|
|
Title: C++/CLIのPropertyBindingについて
|
|
現在C++/CLIを使ってフォームアプリケーションを作成しています
設定などをソフト終了時に一括でapp.configに記録したいのですが、
PropertyBindingを選択しても「設定ファイルがプロジェクトに見つかりません」と出てしまいます。
しかしapp.configは作成してありますし、ビルド後のイベントでcopy "$(InputDir)app.config" "$(OutDir)\$(InputName).config"と入れています
ネット上でもこの操作について解答が得られているものが見つかりませんでした
C++/CLIではこのような操作はできないのでしょうか?
できるようならその方法を教えてほしいです。
261ポイント を手に入れた。
|
|
|
Name: terb ..ぴよぴよ(727ポイント)
Date: 2009/03/13(金) 13:47
No:30596
|
|
Title: RGBの変更
|
|
またお世話になります。
キャラクターなどの素材をフリーのところから色々拾ってきて使ってみたのですが、
例えばキャラクターの目の部分や縁など、黒い部分が(R,G,B)=(0,0,0)で描かれていることが多いようで、
透過処理をするとその部分まで透過されてしまいます。
なので(R,G,B)=(0,0,0)の部分を(R,G,B)=(10,10,10)などに直したいのですが、手作業ではあまりに大変です。
上記の変換が出来る何か簡単な方法、あるいはツールやプログラムなどはないでしょうか?
198ポイント を落としてしまった。
|
|
|
|
Name: nayo ..初心者(8,989ポイント)
Date: 2009/03/13(金) 13:54
No:30598
|
|
Title: Re:RGBの変更
|
|
gimpに色選択があるのでそれで該当色を選択→編集から選択範囲を描画色で塗りつぶし(描画色は目的の色に設定)
などでどうでしょうか
もしくはプログラムの方で黒以外を透過色に設定すればいいかと思います
77ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..熟練のプログラマー(40,938ポイント)
Date: 2009/03/13(金) 14:08
No:30600
|
|
Title: Re:RGBの変更
|
|
ドット絵を描くツールで、EDGEというものはどうですか??
フルカラー(24ビット)はパレットが対応していないので、できませんが、
カラーパレット256色の画像であれば、充分ですよ。
透過色である(0, 0, 0)をカラーパレット上で、値を少し変更してあげるだけで、
その色すべてが変更されます。
(分かりづらくてすいません。使ってみればすぐに分かると思います)
ちなみに私も愛用しているツールなので、お勧めです。
GIMPというソフト(これも愛用しています)もありですが、こっちのソフトは
結構重たいです。
フルカラー画像以外であればEDGEを使われた方がいいかと思います。
185ポイント を手に入れた。
|
|
|
|
|
Name: cosmo ..中級者(9,017ポイント)
Date: 2009/03/13(金) 14:21
No:30601
|
|
Title: Re:RGBの変更
|
|
フリーの画像加工ツールにはJTrimというのもあります。
こちらはGIMPより軽いです。
GIMPよりも機能は劣るかもしれませんが、
手軽に透過処理をしたいという時に私は良く使います。
今回の場合は背景を黒とは違う色で塗りつぶしてから背景色を透過処理すれば良いと思います。
s-rushさんが仰っているようにEDGEでも良いですが、EDGEは何マスごとかに画像を配置しなければならないので、
仕上げにはあまり向かないと思います。
偶に「このパレットタイプはEDGEは対応していません」と出てしまう事があります。
2倍のポイントを手に入れた! 310ポイント を手に入れた。
|
|
|
|
|
Name: terb ..ぴよぴよ(919ポイント)
Date: 2009/03/13(金) 15:05
No:30602
|
|
Title: Re:RGBの変更
|
|
皆様、丁寧な御解答ありがとうございました。
とりあえず、まずはGIMPを使ってみました。
nayo様に教えていただいた通り、
該当色を選択→編集から選択範囲を描画色で塗りつぶし(描画色は目的の色に設定)
をやってみました。
該当色は(R,G,B)=(0,0,0)の部分を選択し、描画色はためしに(R,G,B)=(70,70,70)(灰色)を設定して
塗りつぶしをやってみたのですが、該当色の色が変わりませんでした。
しかし、描画色を(R,G,B)=(255,0,0)として同様の操作を行うと、該当色はきちんと赤に変わりました。
黒に近い色を描画色にしても、該当色が変わらない原因は何かありますでしょうか?
192ポイント を手に入れた。
|
|
|
|
|
Name: terb ..かけだし(1,019ポイント)
Date: 2009/03/13(金) 15:13
No:30604
| 解決!
|
Title: Re:RGBの変更
|
|
画像→モード→RGBを選択することで解決しました。
お騒がせしました。
皆様に紹介していただいたほかのソフトも試してみたいと思います。
ありがとうございました。
2倍のポイントを手に入れた! 100ポイント を手に入れた。
|
|
|
|
Name: ざこ ..プログラマー(36,665ポイント)
Date: 2009/03/12(木) 15:09
No:30522
|
|
Title: DestoryWindowでのエラー
|
|
ダイアログを閉じたいときにAfxGetApp->m_pMainWnd->DestroyWindow()を使ってますが
Debug Assersion Failed!とたびたびでます。でないときもあります。どういうときにでているのでしょうか?
原因と解決策を教えてください
55ポイント を手に入れた。
|
|
|
|
Name: Blue ..初心者(8,195ポイント)
Date: 2009/03/12(木) 15:15
No:30523
|
|
Title: Re:DestoryWindowでのエラー
|
|
なぜこの記述が必要なんでしょうか?
ダイアログクラスであれば、EndDialogとかOnCancelとか使ったほうが良いのでは?
>Debug Assersion Failed!
が出れば、「再試行」からどこでASSERTIONがおこっているか特定できます。
大概、ウィンドウがもう閉じているとかそういうことでしょうけど。
130ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(37,129ポイント)
Date: 2009/03/12(木) 15:27
No:30524
|
|
Title: Re:DestoryWindowでのエラー
|
|
ダイアログがどうしても起動してしまのでMoveWindow(0,0,0,0)とかして閉じたいと思いました。EndDialogというのは始めてみましたが・・これをInitDialogのファイル移動直後に使ったら実質起動しない感じになり、前質問の問題
も解決しました。ありがとうございました。それにしても知らないメンバ関数が多すぎますね・・新VisualC++6.0入門(林晴比古)のビギナとシニアもってるんですが不十分な気もしますね。
何かメンバ関数が詳しくたくさんのってるサイトか参考書ないですか?ヘルプはメンバ関数の内容とかわかるんですけど逆がわからなくてプログラム組むときには苦労してます。
2倍のポイントを手に入れた! 464ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(8,303ポイント)
Date: 2009/03/12(木) 15:34
No:30526
|
|
Title: Re:DestoryWindowでのエラー
|
|
>ダイアログがどうしても起動してしまので
なぜに?
No:30518
でも回答が付いているように
DoModalで表示しているのであればあたりまえです。
108ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(153,928ポイント)
Date: 2009/03/12(木) 15:43
No:30528
|
|
Title: Re:DestoryWindowでのエラー
|
|
MSDNを見れば全てのメンバが解説されてますよ。
VC++6.0ならば、F1キーでMSDNライブラリというウインドウが開くと思います。
そこでキーワードタブをクリックし、CDialogと打ち込めば、CDialogクラスに関するインデックスが表示されると思います。その中に「CDialog クラスメンバ」というのがあるので、それをクリックすればメンバが表示されます。
私も「新VisualC++6.0入門」を持ってますが、これとMSDN、それにネット検索を利用すれば特に困ったことはないんですけどねぇ。入社した当時はプログラムのことを全然知らなかったんですが、それでもなんとかなってましたし…
効率のよい調べ方、デバッグの仕方なんかはどうしても経験を積まないとなかなか身につかないのは良く理解できます。
MFCでオススメサイトを載せておきますね。
http://athomejp.com/goldfish/
11ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(37,246ポイント)
Date: 2009/03/13(金) 09:19
No:30592
| 解決!
|
Title: Re:DestoryWindowでのエラー
|
|
>>ダイアログがどうしても起動してしまので
なぜに?
全質問スレッド参照です。当然ですね。
>私も「新VisualC++6.0入門」を持ってますが、これとMSDN、それにネット検索を利用すれば特に困ったことはないんですけどねぇ。入社した当時はプログラムのことを全然知らなかったんですが、それでもなんとかなってましたし…
私も同じ方法です。どのクラスを使うかわからないと話にならないんですかね。クラスがわかればヘルプで調べています。
117ポイント を手に入れた。
|
|
|
|
Name: MNS ..入門者(3,159ポイント)
Date: 2009/03/11(水) 08:50
No:30433
|
|
Title: C++でSTGを製作しているのですが、クラスで分からないことがあります
|
|
毎度、質問ばかりで申し訳ありません。
シューティングゲームをC++で製作しているのですが、
その際、この「龍神録プログラミングの館」を参考に、
csvファイルを読み込む関数を製作しています。
配列の苦い思い出もあり、できる限りSTLを使って製作しているので、
多少変更がありますが、基本的には同じです。
ただ、根本的に違うのが、キャラや弾を派生クラスとして作成して、
クラスの継承での多態性を利用して、ゲームを作ろうとしている点です。
たとえば、
class BaseVehicle
{
float x,y;
virtual void Move();
void Draw();
}
class EnemyA :public BaseVehicle
{
void Move();
}
class BulletA :public BaseVehicle
{
・・・・・
このような感じです。
問題なのは、読み込み用の関数なんです。
今、キャラ・弾・アイテムなどは、全て std::list で管理していますが、
多態性を実装するために、上にだした例に従うと、
std::list<BaseVehicle *> enemylist;
enemylist.push_back( new EnemyA() );
enemylist.push_back( new EnemyB() );
このように、派生クラスのオブジェクトを動的確保して渡しています。
csv形式のファイルには、座標・出現時間・速度などが記述されていますが、
敵の種類などを記述する手立てがありませんでした。(どの派生クラスのものか)
(要は、敵の情報はその敵に対応する派生クラスのオブジェクトに記録しなければいけないが、
その敵がどの派生クラスなのか分からないため、オブジェクトを作成できない)
いろいろと思考錯誤をしてみて考えた結果、std::mapを利用することを思いつきました。
たとえば、csvファイルに敵の種類を記述する列を設け(利用する派生クラス名)
std::map<std::string, BaseVehicle *> enemymap のようなstd::mapを作り、
そこに、make_pair("EnemyA", new EnemyA() ) のように、ペアを作成して、
読み込んだ文字列をfindで検索する、という形をとろうと思いました。
つまるところ、csvから読み込んだ、cx,cy,cstring(これが派生クラス名)のような変数を
std::map<std::string, BaseVehicle *>::iterator it;
it = enemymap.find(cstring);
(*it).second->x = cx;
(*it).second->y = cy;
enemylist.push_back( (*it).second );
このように、マップに登録されているオブジェクトそのものに値を代入し、
そのオブジェクトをstd::listへ登録する、というものです。
しかし、std::listは基底クラスのポインタなので、ポインタにstd::mapのオブジェクト
のアドレスを渡すことになり、結果的に最後に読み込んだ情報が全て上書きされてしまう、
ということを招いてしまいました(こう考えているんですが、もしかして間違ってますかね?)
私が知りたいのは、
・基底クラスを派生クラスにキャストする方法
・クラスの型が決まらない状態で、あとから決められる方法
・この問題を根本的に解決する手段
このどれかのことが分かれば、解決できると思っています(3番目は投げやりですが;)
ソースを添付しておきますので、
気が向きましたら、回答お願いします。
1,239ポイント を手に入れた。
|
|
|
|
Name: TOMONORI ..かけだし(2,478ポイント)
Date: 2009/03/11(水) 11:50
No:30438
|
|
Title: Re:C++でSTGを製作しているのですが、クラスで分からないことがあります
|
|
"下方キャスト"、"ダウンキャスト"という
> ・基底クラスを派生クラスにキャストする方法
があります。
が、これはコンパイラの庇護の外でのプログラミングですので
よくないとされています。あくまで参考までに。
class Base{/* ... */};
class SubA : public Base{/* ... */};
...
dynamic_cast<subA*>(*it)->(/*SubAのメンバ*/)
多態性のための継承は気をつけるべきことがたくさんあります。
有名なのは基底クラスに仮想デストラクタが必要、とか。
ピアソンの『Effective C++』などの参考書を読むと知りたいことがたくさん
書いてあると思いますよ。
あと、補足として(どちらもMNSさんが理解していることはわかっていますが)
> (*it).second
はit->secondですね?
それとclassの最後のセミコロンは忘れがちなので気をつけてください。
267ポイント を落としてしまった。
|
|
|
|
|
Name: GPGA ..熟練のプログラマー(61,271ポイント)
Date: 2009/03/11(水) 13:00
No:30440
|
|
Title: Re:C++でSTGを製作しているのですが、クラスで分からないことがあります
|
|
敵の種類の識別をIDとし、csvファイルにそのIDを記述してある場合のサンプル
エラーチェックはなし。
class BaseVehicle {
public :
virtual ~BaseVehicle(){}
virtual bool Init(std::string s) = 0;
virtual void Move() = 0;
};
class EnemyA : public BaseVehicle {
public :
virtual bool Init(std::string s);
virtual void Move();
};
class EnemyB : public BaseVehicle {
・・・
std::list<BaseVehicle *> enemylist;
// オブジェクト生成
bool Create(std::string objData) {
// objDataにはcsvの内容の1行が入っているとする
// またobjDataの最初の項目をIDとする
// IDを取り出す
char tmp[10] = { 0 };
const char* p = objData.c_str();
strncpy(tmp, p, strchr(p, ',') - p);
int id = atoi(tmp);
// ID対応するオブジェクトを生成する
BaseVehicle* pBase;
switch (id) {
case 0 : pBase = new EnemyA(); break;
case 1 : pBase = new EnemyB(); break;
default : printf("該当なし\n"); return false;
}
// csvの内容をのものを初期化パラメータとして渡し、初期化は各クラスのInitメソッドにお任せする
pBase->Init(objData);
// リストに登録
enemylist.push_back(pBase);
return true;
}
2倍のポイントを手に入れた! 730ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..入門者(3,264ポイント)
Date: 2009/03/11(水) 13:10
No:30442
| 解決!
|
Title: Re:C++でSTGを製作しているのですが、クラスで分からないことがあります
|
|
TOMONORI さん、 GPGA さん、回答ありがとうございます。
お二人方の回答を参考にして、無事実装することができました。
結局、GPGAさんの回答のように任意のIDを決め、対応するオブジェクトを生成することにしました。
クラスの最後の「;」については、完全なケアレスミスでしたね;
(*it). が it-> でも使える(こっちの方が良いのでしょうか?)とは知りませんでした。
ダウンキャストはいろんなところで役に立ちそうです。どうもありがとうございました。
105ポイント を手に入れた。
|
|
|
|
|
Name: Mikan [URL] ..初心者(7,082ポイント)
Date: 2009/03/12(木) 01:48
No:30480
|
|
Title: Re:C++でSTGを製作しているのですが、クラスで分からないことがあります
|
|
私のホームページで似たような作り方をしているSTGのソースファイル(作成途中w)を
公開しています。
参考にはならないかもしれませんが^^;
興味があったらごらんください♪
60ポイント を手に入れた。
|
|
|
|
|
Name: MNS ..入門者(3,398ポイント)
Date: 2009/03/13(金) 06:53
No:30589
| 解決!
|
Title: Re:C++でSTGを製作しているのですが、クラスで分からないことがあります
|
|
C++で作ったSTGのソースファイルを見る機会はあまりないので、
このように、ソースを公開してくださるのはありがたいです!
量が多くて、読むのには時間がかかりそうですが、
似たような作りであることは、多いに参考になります。
mikanさん、どうもありがとうございます。
134ポイント を手に入れた。
|
|
|
|
Name: はね ..初心者(8,492ポイント)
Date: 2009/03/12(木) 16:33
No:30529
|
|
Title: MFCについて
|
|
現在、OpenGLの勉強をしています。
GLUTを使い、一通り基礎的なところは勉強終えたので、慣れる為にも3Dゲームを作ろうかと思っていました。
で、http://www.geocities.jp/gamerabbits/opengl1_6.htm
こちらのページを参考にしようと思ったのですが、
"afxdtctl.h"を開けないエラーが出ます。
上記のサイトに書いてあるようにMFCを導入すればいいらしいのですが、dllファイルをプロジェクトに入れても上手く動きません。
(MFC自体初めて聞いたので、導入がdllをプロジェクトに入れるだけでいいのかも怪しいです)
解決の為色々と調べたところVC++2005Express Edition(←現在使用中)はMFCが使えないらしいのですが、これは諦めるしかないのでしょうか?
質問をまとめると
1、MFCの導入はdllファイルをプロジェクトに入れるだけでいいのか。
2、VC++2005EEでMFCは使えず、現在の環境で開発は無理なのか。
3、何か解決策をご存知の方いらっしゃれば教えて頂きたいです。
よろしくお願い致します。
436ポイント を手に入れた。
|
|
|
|
Name: バグ ..ハッカー(153,957ポイント)
Date: 2009/03/12(木) 17:18
No:30530
|
|
Title: Re:MFCについて
|
|
残念ながらVS2005EEではMFCは使用できません。
MFCが使用するには有料版のVisualStudioを購入する必要があります。
29ポイント を手に入れた。
|
|
|
|
|
Name: はね ..初心者(8,546ポイント)
Date: 2009/03/12(木) 17:32
No:30531
| 解決!
|
Title: Re:MFCについて
|
|
迅速な回答ありがとうございます。
やはり使えませんでしたか・・・。
仕方ないのでプリミティブで頑張ってみます。
ありがとうございました。
54ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(88,199ポイント)
Date: 2009/03/12(木) 17:38
No:30532
|
|
Title: Re:MFCについて
|
|
Platform SDKに付属のMFC(VC++6.0のものとほぼ同等)であれば使えるかもしれません。
環境構築は大変だと思いますし、AppWizardもなければClassWizardもありませんが、使えるはずです。
Standard Editionを購入する方が安くつく気はします。
出費を惜しむなら、体で払うしかないということですね。
78ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(154,053ポイント)
Date: 2009/03/12(木) 17:51
No:30533
|
|
Title: Re:MFCについて
|
|
そこまでするなら、.NETを利用する方が良さそうな気もしますね…(苦笑)
クラスやメソッドの名前なんかはMFCと似てる部分も少なくありませんし…。どうしてもMFCでなければいけないというのであれば仕方ないですが(^_^;)
96ポイント を手に入れた。
|
|
|
|
|
Name: はね ..初心者(8,699ポイント)
Date: 2009/03/12(木) 18:26
No:30535
|
|
Title: Re:MFCについて
|
|
MFCを使いたい理由と言うのがただ、ゲームを作る際に
プリミティブだと味気ないので3Dモデルを読み込みたいだけなんです。
勤務先がOpenGLを使用してまして入社までに少しでも慣れておきたいという程度で
勉強できれば何でも良かったりします。
たかぎ様とバグ様の話を拝見した感じですと、今回の目的とは割に合わなそうなのでプリミティブでいこうと思います。
153ポイント を手に入れた。
|
|
|
|
|
Name: tkmakwins15 ..比類無きプログラマー(94,825ポイント)
Date: 2009/03/12(木) 23:44
No:30570
|
|
Title: Re:MFCについて
|
|
>.NETにすると、OpenGLとの親和性はどうなんですかね。
C++/CLIであれば、全く不可能というわけではなさそうです。
#include<windows.h>
#include<GL\gl.h>
#include<string>
using namespace std;
#using "System.dll"
#using "System.Windows.Forms.dll"
#using "System.Drawing.dll"
using namespace System;
using namespace System::Windows;
using namespace System::Windows::Forms;
using namespace System::Drawing;
using namespace System::Timers;
const int ClientWidth=640;
const int ClientHeight=480;
class GlCurrent{
HDC m_formDC;
HGLRC formRC;
public:
GlCurrent(HDC formDC){
//OpenGLのコマンドの出力先に関連付ける。
formRC=wglCreateContext(formDC);
wglMakeCurrent(formDC,formRC);
m_formDC=formDC;
}
~GlCurrent(){
::wglMakeCurrent(m_formDC,NULL);
::wglDeleteContext(formRC);
}
};
ref class GlForm:Form{
HDC formDC;
//初期化メソッド
void SetNoReSize(){
Drawing::Size csize;
csize.Width=::ClientWidth;
csize.Height=::ClientHeight;
Form::FormBorderStyle =Forms::FormBorderStyle::FixedSingle;
Form::MaximizeBox=false;
Form::ClientSize=csize;
}
void SetGlDrawArea(){
//ピクセルフォーマットの構造体の初期化。
::PIXELFORMATDESCRIPTOR pxfmt={0};
pxfmt.nSize=sizeof(pxfmt);
pxfmt.dwFlags=PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;
pxfmt.nVersion=1;
pxfmt.iPixelType=PFD_TYPE_RGBA;
pxfmt.dwLayerMask=PFD_MAIN_PLANE;
pxfmt.cColorBits=32;
pxfmt.cDepthBits=16;
//ウィンドウのDCを得て、(互換DCを生成する。*現行では直接描画)
int handle;
handle=Form::Handle.ToInt32();
formDC=::GetDC(reinterpret_cast<HWND>(handle));
//ピクセルフォーマットを設定する。
int v_pxfmt;
v_pxfmt=ChoosePixelFormat(formDC,&pxfmt);
SetPixelFormat(formDC,v_pxfmt,&pxfmt);
}
~GlForm(){
::ReleaseDC(reinterpret_cast<HWND>(Form::Handle.ToInt32()),formDC);
}
!GlForm(){
::ReleaseDC(reinterpret_cast<HWND>(Form::Handle.ToInt32()),formDC);
}
public:
GlForm(String^WText){
//フォームのタイトルをセットする。
Form::Text=WText;
//フォームの大きさを固定する。
SetNoReSize();
//フォームをOpenGLの描画領域に結びつける。
SetGlDrawArea();
//フォームのバックカラーを黒にする。
Form::BackColor=Color::Black;
}
virtual void OnPaint(PaintEventArgs^e)override{
GlCurrent gc(formDC);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glVertex2f(0.0f,0.0f);
glVertex2f(0.5f,0.5f);
glEnd();
//バックバッファを転送する。
SwapBuffers(formDC);
}
void TimeProc(Object^sender,System::Timers::ElapsedEventArgs^e){
GlCurrent gc(formDC);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glVertex3f(0.0f,0.0f,0.5f);
glVertex3f(0.5f,0.5f,-0.1f);
glEnd();
//バックバッファを転送する。
SwapBuffers(formDC);
}
};
int main()
{
GlForm^gf=gcnew GlForm("GlForm");
System::Timers::Timer^loops=gcnew System::Timers::Timer;
loops->Elapsed+=gcnew System::Timers::ElapsedEventHandler(gf,&GlForm::TimeProc);
loops->Interval=1000/33;
loops->Enabled=true;
Application::Run(gf);
return 0;
}
84ポイント を手に入れた。
|
|
|
|
Name: terb ..ぴよぴよ(870ポイント)
Date: 2009/03/12(木) 00:13
No:30477
|
|
Title: slnが変換出来ません
|
|
またお世話になります。
Visual C++ 2008 Express Editionを使用しています。
龍神録プログラミングの館の第1章で、プロジェクトをまとめてダウンロードしたのですが、
その中にあるslnファイルを開こうとすると、変換ウィザードが出てきました。
そこで変換しようとしたところ、
変換の問題 - RyuJin.vcproj:
プロジェクト ファイル 'C:****\RyuJin.vcproj' をアップグレードできませんでした。このファイルが存在し、書込み保護されていないことを確認してください。
プロジェクトはアップグレードに失敗しました。
というエラーが出て変換できず中身を見ることが出来ません。
この状態で章を進めていったのですが、shotatan2,graph_bullet,shot_searchなどの関数の中身が分からず、
詰まってしまいました。
何か解決案があれば教えて頂けると幸いです。
355ポイント を手に入れた。
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,008,963ポイント)
Date: 2009/03/12(木) 08:12
No:30487
|
|
Title: Re:slnが変換出来ません
|
|
一応プロジェクトはダウンロードしなくても、自分で作れるようになっています。
関数の中身は章の中で説明していますので。
書き込み保護・・っていうことは、何か他のエディタか何かでひらいてるのでしょうか・・?よくわかりませんが。。
PCを再起動してもう一度やってみるか、最近よくある、DLミス、解凍ミスが起きている可能性があるので再度DLからやってみるかしてみてはいかがでしょうか。
150ポイント を手に入れた。
|
|
|
|
|
Name: terb ..ぴよぴよ(925ポイント)
Date: 2009/03/12(木) 23:09
No:30563
|
|
Title: Re:slnが変換出来ません
|
|
たかぎ様、管理人様、回答ありがとうございました。
zipファイルを解凍せずに開こうとしていました。解凍しないとダメだったんですね。
解凍した後は開くことができました。
自分の知識のなさが恥ずかしい限りです。
55ポイント を手に入れた。
|
|
|
|
Name: ざこ ..プログラマー(34,688ポイント)
Date: 2009/03/11(水) 17:14
No:30450
|
|
Title: DragDropだと成功、通常起動だと失敗
|
|
自分なりに考えた結果・・InitDialogクラスにコマンドライン引数__argv[1]を使ってファイル移動のプログラム全部ぶちこみました。
BOOL CDragDrop6Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// "バージョン情報..." メニュー項目をシステム メニューへ追加します。
// IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// このダイアログ用のアイコンを設定します。フレームワークはアプリケーションのメイン
// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定
// TODO: 特別な初期化を行う時はこの場所に追加してください。
registry=0;
m_listC.InsertColumn(0,"拡張子",LVCFMT_CENTER,100);//リストボックスの初期設定
m_listC.InsertColumn(1,"移動先",LVCFMT_CENTER,360);
m_listC.InsertColumn(2,"チェックボタン",LVCFMT_CENTER,100);
DragAcceptFiles(TRUE);
reg_Number();
CString expand,movement;
CKodomo1Dlg dlg;
dlg.m_chk1=&chk;
CString CHK;
ReadReg(0, "Reg_Drop1","CHKBUTTON1");//レジストリ読み込み
ReadReg(1, "Reg_Drop2","CHKBUTTON2");
ReadReg(2, "Reg_Drop3","CHKBUTTON3");
ReadReg(3, "Reg_Drop4","CHKBUTTON4");
ReadReg(4, "Reg_Drop5","CHKBUTTON5");
ReadReg(5, "Reg_Drop6","CHKBUTTON6");
ReadReg(6, "Reg_Drop7","CHKBUTTON7");
CString Cname=getFileName(__argv[1]);
int index=-1;
CString kaku=strchr(__argv[1],'.');
CFileStatus FSts;
while((index=m_listC.GetNextItem(index,LVNI_ALL))!=-1){
CString str_index=m_listC.GetItemText(index,0);
CString str_index2=m_listC.GetItemText(index,1);
CString Rname=str_index2+"\\"+Cname;
CString r_chk=m_listC.GetItemText(index,2);
if(kaku=="."+str_index){
// n=index;
if(atoi(r_chk)==1){
MessageBox("上書きされます");
MoveFileEx(__argv[1],str_index2,MOVEFILE_REPLACE_EXISTING);
MoveFileEx(__argv[1],str_index2+"\\",MOVEFILE_REPLACE_EXISTING);
MoveFileEx(__argv[1],Rname,MOVEFILE_REPLACE_EXISTING);
}
else{
if(CFile::GetStatus(Rname,FSts)){
MoveFile(__argv[1],str_index2);
MoveFile(__argv[1],str_index2+"\\");
MoveFile(__argv[1],Rname);
}
else{
MoveFile(__argv[1],str_index2);
MoveFile(__argv[1],str_index2+"\\");
MoveFile(__argv[1],Rname);
}
}
}
}
このようにした結果exeアイコンへのドラッグ&ドロップは成功しました。
しかし通常起動(ビルド→実行 or アイコンをダブルクリック)すると"問題が発生しました。プログラムを
終了します"とでます。原因はどうやら
CString Cname=getFileName(__argv[1]);
のgetFileName(フルパスからファイル名を取り出すプログラム)の中にあるみたいで
char *CDragDrop6Dlg::getFileName(char *lpszPath)//全パスからファイル名を取り出す関数
{
char *lpszPtr=lpszPath;
while(*lpszPtr != '\0')//////////ここから先進みません。
{
//2バイト文字の先頭はスキップ
if(IsDBCSLeadByte(*lpszPtr) == 0)
{
//[\],[/],[:]を見つけたら現在地+1のポインタを保存
if((*lpszPtr == '\\') || (*lpszPtr == '/') || (*lpszPtr == ':'))
{
lpszPath=lpszPtr+1;
}
}
//次の文字へ
lpszPtr=CharNext(lpszPtr);
}
return lpszPath;
}
return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。
}
コメントの位置で止まります。どうして通常起動のときだけなるのか、何が悪いのかなど教えて下さい。
1,801ポイント を手に入れた。
|
|
|
|
Name: Blue ..初心者(7,797ポイント)
Date: 2009/03/11(水) 17:28
No:30452
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
__argcの値を確認していますか?
__argv[1]が常にあるとは限りません。
24ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(34,927ポイント)
Date: 2009/03/11(水) 17:41
No:30453
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
なるほどそれが原因かな・・デバッグで調べ様にもハンドルがないと言われるしMessageBoxで調べたら空でした。
おそらくドロップしてきた場合はargvに値入ってますが総でない場合は入ってない のでしょうか。
2倍のポイントを手に入れた! 152ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(35,058ポイント)
Date: 2009/03/11(水) 17:55
No:30454
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
やはりその通りでした。argv[1]!=NULLという条件を加えれば落ちなくなりました。
ところで、この場合ドラッグ&ドロップすると移動(プログラム目的)された後実行ファイルが起動します。
Mistさんにも仰られたように起動自体はせず実行だけしたいんですが、最初のダイアログを表示している所は
InitInstanceでしょうか?同様に__argv[1]の有無でドラッグ&ドロップか通常起動か、分けてるんですがそこでやってみた結果移動しませんでした。
131ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(55,173ポイント)
Date: 2009/03/11(水) 17:55
No:30455
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
argvとargcについて勉強しました?
argcにはコマンドライン引数の個数が入っています。
argvには引数の文字列が入っています。
通常起動時
argc=1
argv[0]=アプリケーションファイル名(〜.exe)
ドロップ時
argc=1+ドロップされたファイルの数
argv[0]=アプリケーションファイル名(〜.exe)
argv[1]=ファイル名1
argv[2]=ファイル名1
・
・
というか、OK Waveでせっかくもらえた回答は無視ですか?
158ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(7,685ポイント)
Date: 2009/03/11(水) 18:01
No:30456
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
> 起動自体はせず実行だけしたい
なら今の作りをカナリ変えないとダメでしょう。
画面は必要な情報を集めるためのユーザインタフェース
だけにして、それに対して処理をする部分を切り分ける。
あとからあとから仕様を変えていくからムリヤリな感じになってしまうんでしょうね。
作り始める前に必要な機能を整理しておくべきでしたね。
112ポイント を落としてしまった。
|
|
|
|
|
Name: ざこ ..プログラマー(35,299ポイント)
Date: 2009/03/11(水) 18:03
No:30457
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
いえいえ恥ずかしながら私がargc argvのことをしったのはあそこが初です。
失礼ながら私の現段階ではあの文章は 理解できなかったというのは少し違ってあのプログラムは
回答を導く為の補佐するものと思いました。回答をいただいて色んな人の意見(あれで十分とけるなど)をいただいても今の私にできるのはここまで。何時間もargv argc コマンドライン引数に調べてこの程度です。まぁ
あの回答でできます と言われた程度でできるなら見た瞬間わかりますけどね。始めてみたときには丁寧な説明と感じました。しかし意味がちんぷんかんぷんでした。調べた結果語句などは理解できました。
ココの掲示板でバグさんやtoyoさんにあれを理解すればできる といわれてから何時間もにらめっこしていますが、
なんとなく、わかる程度です。argvやargcに何が書いてあるのかわかったのでそれを使って自分なりに回答を導こうとしているだけです。 そうすれば多分回答者様のアドバイス内容もわかると思います。
Mistさんが今書かれたことは存じています。
せっかく回答していただいた意見を無視したことなど【一度も】 ありません。
241ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(35,346ポイント)
Date: 2009/03/11(水) 18:28
No:30458
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
やはり大幅に変えないといけませんか。もう少し自分でも調べた方がいいのでしょうが
何をキーワードに検索すればいいのかもさっぱりです。
47ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(35,468ポイント)
Date: 2009/03/11(水) 18:47
No:30462
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
あのときは少し勘違いをしていて、起動させてからドロップさせてもいいんじゃないか?と思ってたんですよ。
かなり後の方に起動させずに っと言われまして、そのスレッドは使わずに他の問題点に頭ひねらせていました。
OKWAVEの方でも簡単な表示するプログラムをご紹介していただいているので、多分そのときに
調べていても多分今とそれほどかわらなかったとおもいますよ。あーしかしこのスレッド完全に忘失していましたね。
ここでも同じ問題起こしています。以後気をつけます
argcとargvについては大体といってもMistさんに書いていただいた内容程度ですが理解できてると思います。
ブルーさんに意見をいただいた後にすぐ原因わかりましたし。
122ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(27,444ポイント)
Date: 2009/03/11(水) 21:03
No:30470
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
ドラッグされたときにはダイアログを出さないようにしたいわけですね
CDragDrop6App::InitInstance()
に
int nResponse = dlg.DoModal();
という箇所があると思いますがこのDoModalの前に処理を終わらせてreturn FALSE;すればいいと思います。
DoModal()でダイアログが表示されてしまいます。
BOOL CDragDrop6App::InitInstance()
{
//略
if (__argc > 1)
{
//処理を行う
return FALSE;
}
CDragDrop6Dlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: ダイアログが <OK> で消された時のコードを
// 記述してください。
}
else if (nResponse == IDCANCEL)
{
// TODO: ダイアログが <キャンセル> で消された時のコードを
// 記述してください。
}
// ダイアログが閉じられてからアプリケーションのメッセージ ポンプを開始するよりは、
// アプリケーションを終了するために FALSE を返してください。
return FALSE;
}
274ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(35,533ポイント)
Date: 2009/03/11(水) 21:08
No:30471
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
なるほど、ずっとそこいじくってましたがうまいこといきませんでした
今試せる環境にないので後日試して見ます。ありがとうございました。
65ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(35,594ポイント)
Date: 2009/03/12(木) 09:21
No:30493
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
起動はできなくなりましたが実行もできなくなりました。どこか全体のプログラムをまとめている関数みたいなものはないのでしょうか?後そこをいじくるぐらいしか思いつかないです。切り分けしか方法はないのかな.
61ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(55,196ポイント)
Date: 2009/03/12(木) 09:28
No:30494
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
> そういう訳で、メインプログラムの最初で「__argcは幾つか?」を調べ、実行時引数があるなら(__argcが2以上だったら)「__targv[1]〜__targv[__argc - 1]」の内容を「ドロップされたファイル名として処理する」って事になります。
この部分無視していなければ、最初のプログラムにはならないよね。
23ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(35,817ポイント)
Date: 2009/03/12(木) 09:43
No:30495
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
何度も言いますが、貴方のように大方 わかるわけじゃありません。理解しずらい表現も、語句も、色々あるわけですよ。調べまくりましたが理解しずらい所もあります。無視?理解しずらかっただけですよ。プログラムは勉強だけじゃなく実際に打ち込んで学ぶものと聞きます。曖昧な所は打ち込んで理解する。そうなると完璧なプログラムは最初からはできません。教えてもらってる立場で非常に恐縮ですが無視 無視といわれるとどうも・・
上級者から見るとそう見えるのかもしれませんね。
223ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(35,882ポイント)
Date: 2009/03/12(木) 09:47
No:30496
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
うーんしかし今も__argv[1]が空かどうかでドロップか通常起動か判断していますが、
argcの方が何かと使い勝手がいいのかもしれませんね。
65ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..中級者(14,874ポイント)
Date: 2009/03/12(木) 10:02
No:30497
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
MFCでなければならない理由があるのですか?
>プログラムは勉強だけじゃなく実際に打ち込んで学ぶものと聞きます。曖昧な所は打ち込んで理解する。そうなると完璧なプログラムは最初からはできません。
この部分に私も大賛成なのですが、だからこそ、まずはコンソールや非MFCなWin32Appで作ってみることが大切なのではないでしょうか。
もう既にいくつもテストプログラムを作っているのでしたら的外れな指摘になりますが、まずはここで得た知識をもとにコンソールで作ってみては如何でしょう?
70ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(153,917ポイント)
Date: 2009/03/12(木) 10:07
No:30498
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
一度、やりたい事を整理して仕様をキッチリ固めた方がよいかもしれませんね。
アプリの動作を細かく箇条書きにしていき、1つ1つ実装していく。
その過程で分からないところが出てきたならば、箇条書きにした文章を全て掲載して、この部分でつまづいています。というのを質問する…という風にすれば、自分自身にも回答者にも分かりやすくなると思います。
124ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(35,948ポイント)
Date: 2009/03/12(木) 10:08
No:30499
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
理由ですか、あくまでMFCの勉強の為だからかな・・ というのも仕事でMFC使うみたいですのでそれの研修(勉強)中なのです。
2倍のポイントを手に入れた! 66ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(55,020ポイント)
Date: 2009/03/12(木) 10:09
No:30500
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
上級者であるかどうかなんか関係なくて
問題が発生する
↓
質問する
↓
回答もらう
↓
さらに問題発生する
↓
★今まで貰った回答を見直す
ということしていないじゃないですか?
最初に問題にぶつかったときに、OK Waveから引用した部分について(その他についても)対処できているかどうかを見直されましたか?
回答するほうは、今ある問題だけでなくその対応をした場合に(今回のような)よくやりそうな二次的なミスについても言及している場合があります。
176ポイント を落としてしまった。
|
|
|
|
|
Name: ざこ ..プログラマー(36,027ポイント)
Date: 2009/03/12(木) 10:10
No:30501
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
成る程私の質問は回答者様には若干理解しずらいような雰囲気が感じられますので理解しやすくなるように
工夫していきたいですね。自分自身も整理できてない部分もありますね
79ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(36,357ポイント)
Date: 2009/03/12(木) 10:21
No:30502
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
いやしていますけど理解できなかった所が ☆の時点でですか、急にはわかるようにはならないんですね。
質問すればいいんですけど、回答者様の意見をじっと待つってのも少々都合が悪いでしょう。ただ今回の場合
argv[1]が空とかじゃなくてargcを使っていれば最初の文にはならない ということだと思います。
最初に思いついたのが私のやり方で(argcでやるという方法も考慮には入ってましたが)それでうまくいかなかったので質問、→ブルーさんにargv[1]は中身入っているとも限らない。
あ、そういえばそんなことOKWAVEの方でもあったね(見落としですが) となってargv[1]!=0を思いつきました。
それでargcの方はわかってたんですがtargv[1]〜というのが何の事か理解できたんです。
そういう順序もありなのではないでしょうか。
330ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(36,470ポイント)
Date: 2009/03/12(木) 10:29
No:30503
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
まぁたしかにちゃんとしっかり見直していれば質問の必要もない というのは納得です。見落としのせいでしたから・・ ただ日本語の問題でしょうけども●●について理解できていないと直接言っていただいて構いません。
回答者様の意見を無視している、というのは見向きもしないで調べもしないでいる と受け取ってちょっと熱くなってしまいました。
113ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(8,065ポイント)
Date: 2009/03/12(木) 10:31
No:30504
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
argv[1] != NULL
というようなコードより
argc >= 2
という風にしたほうが良いです。
C言語の規格では
argv[argc]はNULLでないといけないとなっていますが、
たとえば、argv[2]を使わないといけないときにはargcが1未満であるとき問題が出てしまいます。
こんなのは問題です。
if (argv[1] != NULL) {
printf("%s", argv[1]);
}
if (argv[2] != NULL) {
printf("%s", argv[2]);
}
こちらなら問題ありません。
if (argc >= 2) {
printf("%s", argv[1]);
}
if (argc >= 3) {
printf("%s", argv[2]);
}
2倍のポイントを手に入れた! 380ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(36,516ポイント)
Date: 2009/03/12(木) 10:37
No:30505
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
なるほど、それは知りませんでした。argcを使うようにします。
2倍のポイントを手に入れた! 46ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(27,581ポイント)
Date: 2009/03/12(木) 11:59
No:30507
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
実行できませんでしたか
やりたいことはファイル移動ですよね
移動元のファイル名は__targv[ ]で取得できますが移動先ファイル名はどうやって決めるのでしょうか
先の投稿の
//処理を行う
の部分に
MoveFileEx(__targv[1],TEXT("移動先ファイル名"),MOVEFILE_REPLACE_EXISTING);
とするだけだと思うのですが
それとMoveFileExの戻り値はチェックしたほうがいいでしょう
特にVistaでは書き込めないフォルダがありますので
137ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(36,556ポイント)
Date: 2009/03/12(木) 12:20
No:30511
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
ああ・・//処理を行うとはそういう意味でしたか。勘違いでした。少し試してみますね。
40ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(36,591ポイント)
Date: 2009/03/12(木) 13:05
No:30517
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
うーん移動先ファイル名ですがプログラムではリストボックスから文字列取り出してるのですが
AppクラスにDragDro6Dlgクラスからとってこれるものでしょうか?
InitInstanceとInitDialogの関係がいまいちよくわかってないのかもしれません。
35ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(27,637ポイント)
Date: 2009/03/12(木) 13:50
No:30518
|
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
プログラムの流れとしては
InitInstance( )
↓
DoModal( )→InitDialog( )→ダイアログ表示
になります
ダイアログ表示前(DoModal実行前)にダイアログクラスからデータを得る方法は思いつきません
56ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(36,610ポイント)
Date: 2009/03/12(木) 13:54
No:30519
| 解決!
|
Title: Re:DragDropだと成功、通常起動だと失敗
|
|
そうでしたか、それだとつくりを作り変えなければ私の望むプログラムは作れない ということになりますね。
親切にありがとうございました。
19ポイント を手に入れた。
|
|
|
|
Name: bagsac ..ぴよぴよ(31ポイント)
Date: 2009/03/09(月) 09:41
No:30303
|
|
Title: 質問です
|
|
東方を作成する際ある程度C言語を理解しているとして、どのくらいの期間でコンプリ-トできるのでしょうか??
31ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(69,561ポイント)
Date: 2009/03/09(月) 10:51
No:30312
|
|
Title: Re:質問です
|
|
> ある程度C言語を理解しているとして
東方に限らず、以下の点が挙げられます。
まず、何を作るかによりますが、一から作るのであれば、
簡素なものでない限り、少なくとも1ヶ月やそこらではコンプリートできません。
(バグ取りや難易度調整を含む)
C言語を理解しても、グラフィカルな表示を行なう場合、
他の知識(DXライブラリやDirectXなど)も理解し、
アルゴリズム(敵や弾の動き・思考パターンとか)や、
フロー遷移(各画面への移行など)の仕方など、
知らなければならないものは沢山あります。
(わざと難しく書いていますが、要はどのように処理するかです)
そのため、作り方がわからないのに、いきなり大きなもの(RPGなど)を創ろうとすると、確実といって良いほど挫折します。
まずは小規模なゲーム(じゃんけんゲームとか)から実際に作っていって、
こういう風に作れば良いのかー
と、きちんと理解して、
次の段階へステップアップしていく方が近道です。
ちなみに、どんなゲームを作るのでしょうか?
STGなら竜神録プログラミングの館でしっかり理解しながら覚えていくといいと思います。
301ポイント を手に入れた。
|
|
|
|
|
Name: s-rush ..プログラマー(37,779ポイント)
Date: 2009/03/09(月) 11:41
No:30318
|
|
Title: Re:質問です
|
|
ド素人の私ですが、自分もゲームを作っている一人です。
仕事ではなく趣味としてですが。
御津凪さんのおっしゃる通り、1カ月やそこらではできないです。
現に私自身RPGですが制作に入ってからもうすぐで3か月になります。
グラフィックや音楽も自分でやっているので、だいぶ時間がかかっています^^;
慣れていないとよく分からないバグが出たりで結構苦労します。
先日ですが、マップを大きくしたとたんに音楽が鳴らなくなったり、
移動速度が遅くなったりと・・・
(皆さんのおかげで解決できました^^)
作っていて思ったことは、コンパイルが通ったとしても必ずしも
思い通りの動作をするという保証がないということですね。
こういうバグは慣れていなければ、改善できるまでかなり時間がかかると思います。
やっぱり基本的なCの知識があったからと言って、ゲームみたいなものはすんなりと作れないと思います。
移動処理やその他いくつもある処理もおそらく今まで参考書に書かれているようなものとは
異なる点が多いと思うので・・・
やはり、はじめは小さなゲームから作り始めて慣れていくことが一番の近道かと思います。
私自身もはじめはじゃんけん、数当てゲーム、チェス、RPGという感じに
少しづつ制作レベル(?)を上げていっています。
御津凪もおっしゃっていますが、いきなり大作を作ろうとするなら、
途中で挫折しかねないと思いますよ^^
>>いきなり大きなもの(RPGなど)を創ろうとすると、確実といって良いほど挫折します。
何度もあきらめかけたことがあります^^;
何もアドバイスがなければ確実かもです。
652ポイント を手に入れた。
|
|
|
|
|
Name: 朽木 ..かけだし(1,670ポイント)
Date: 2009/03/12(木) 11:52
No:30506
|
|
Title: Re:質問です
|
|
前のお二人と同じような内容ですが私も少し。
言語さえ理解していれば良いというものでもないですよね。
自分が思うに、「作る」という事は、先ず経験と、次に発想力が大切になってくると思います。
例えば、2つの変数の値を交換する、というプログラムを書くときも、
int z;
z = x;
x = y;
y = z; という簡単なものもあれば、
#define Trade1(x,y) (x ^= (y ^= (x ^= y) ) )
#define Trade2(x,y) (x ^= y, y ^= x, x ^= y) のような変な事をする方法もあります。( Trade1,2は同じ )
また、以前にも書いたことがあるのであれば、それを使えば一発で終わります。
画像や音を使うために、使用するライブラリによっても、使い勝手や機能が異なってくるので、
無いモノを自分で新しく作ったりしなければなりません。
そこで「じゃあDxLibを使用する場合はどうなるんでしょうか。」って事になるんですが、
前述した通り、万人皆同じ考えを持つとは限りませんから、大小差が出てきます。
発想力が凄かったり、経験がある人は1ヵ月も経たずに完成させてしまうかもしれません。
しかし、ただ人の言葉だけをインプットされた子供のような未経験の人は、何をして良いか分からず、何かある
ごとに壁にぶつかり、試行錯誤の日々が続き、1年2年掛かっても進まず、最後は嫌になって挫折します。
これは経験のある人でも同じです。水泳が得意な選手に突然、水蜘蛛の術をやらせても、まず沈むでしょう。
御津凪 さんや、 s-rush さんが言ったように、最初は恥ずかしくて見せられないような駄作でも良いので、
自分のスタート地点を探して、そこから作る事をお勧めします。
600ポイント を手に入れた。
|
|
|
|
Name: ひよこ ..上級者(20,951ポイント)
Date: 2009/03/11(水) 14:50
No:30443
|
|
Title: キャラクターの画像について
|
|
ゲームはマップの上をキャラクターが動きますよね。
龍神録でもありますがキャラクターとマップはどうしたら画像がかさならないでしょうか?
(例えば黒のキャラクターに白い背景のものがあるとキャラクターが動くと背景とかぶさってしまう
ことです。)
90ポイント を手に入れた。
|
|
|
|
Name: 朽木 ..ぴよぴよ(409ポイント)
Date: 2009/03/11(水) 15:12
No:30444
|
|
Title: Re:キャラクターの画像について
|
|
透明度情報であるα値が画像に含まれていて、使用されているライブラリが対応していればそれでできますし、
カラーキーという、特定の色を描画しない機能が用意されているものもあります。
50ポイント を手に入れた。
|
|
|
|
|
Name: 朽木 ..ぴよぴよ(605ポイント)
Date: 2009/03/11(水) 15:27
No:30446
|
|
Title: Re:キャラクターの画像について
|
|
ライブラリについては自身で検索して知るのが一番ですが、リファレンスを見てみた所、指定する機能はあるようです。
ttp://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph.html#R15N7
また、使用例を紹介しているページもあるようですので、そちらも参考にされてはいかがでしょうか。
ttp://karetta.jp/article/book/236542/236758
2倍のポイントを手に入れた! 196ポイント を手に入れた。
|
|
|
|
|
Name: Kou ..入門者(3,086ポイント)
Date: 2009/03/11(水) 18:46
No:30461
|
|
Title: Re:キャラクターの画像について
|
|
チップの背景が【黒】ならば【DarwGraph】や【LoadGraphScreen】の透過フラグをTRUEにすれば、
透過表示されます。
チップの背景が黒以外ならば、【SetTransColor】で明示的に透過色を指定できますよ。
但し透過フラグをTRUEにした場合、本家リファレンスでは『限りなく黒に近い色を透過色にする』とあります。
画像の作成時の設定等で多少癖があるので、本家ページで確認した方が良いと思います。
189ポイント を手に入れた。
|
|
|
|
|
Name: ひよこ ..上級者(21,015ポイント)
Date: 2009/03/11(水) 21:28
No:30472
| 解決!
|
Title: Re:キャラクターの画像について
|
|
そうなんですか。ありがとうございました。
自分でいろいろ試してみます。
40ポイント を手に入れた。
|
|
|
|
Name: terb ..ぴよぴよ(235ポイント)
Date: 2009/03/10(火) 23:44
No:30423
|
|
Title: 画像が表示されません
|
|
はじめまして。
今日このHPを初めて訪問して、自分もいつかこんなゲームが作れるようになるのか!とやる気に満ち溢れています。
・・・が、このような質問で大変恐縮なのですが、入門編の、3.画像を表示する、の項で
画像が表示されませんでした(ウィンドウ画面は真っ黒でした)。
画像が正常に表示されるか確かめるプログラムを実行しましたが、画像の保存場所が違うか、ファイル名が違うため、表示できません、と出ました。
しかし、DXライブラリの設定のところで画面中央にドット絵を表示するものはきちんと表示されました。
画像の保存場所もサンプルプログラム実行用フォルダの中に保存しましたし、他の設定も書かれてあるようにやったつもりです。
原因は分かりますでしょうか?
よろしくお願いいたします。
235ポイント を手に入れた。
|
|
|
|
Name: terb ..ぴよぴよ(269ポイント)
Date: 2009/03/10(火) 23:47
No:30424
|
|
Title: Re:画像が表示されません
|
|
すみません。
書き忘れていましたが、Visual C++ 2008 Express Editionを使っています。
34ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..かけだし(1,485ポイント)
Date: 2009/03/11(水) 01:01
No:30426
|
|
Title: Re:画像が表示されません
|
|
ファイル名のところの.が,になってるみたいな誤字とかはありませんか?
多分ちゃんとウィンドウが表示されるんなら(画面真っ暗にせよ)DrawGraphScreenのどっかか画像の保存場所しか怪しいところは無いと思います…多分…
僕もまだ未熟なもんでこんな解答しか出来なくてすいません(-.-;)
85ポイント を手に入れた。
|
|
|
|
|
Name: terb ..ぴよぴよ(471ポイント)
Date: 2009/03/11(水) 01:12
No:30427
|
|
Title: Re:画像が表示されません
|
|
回答ありがとうございます。
ファイル名は合っていました。
先ほど試しに画像ファイルをVisual C++のファイルの中に移してみたら、画像を表示することが出来ました。
なので、Visual C++内のオプションで
ディレクトリリストにDXライブラリのパッケージ内に入っている
『プロジェクトに追加すべきファイル_VC用』フォルダのパスを追加する、
という方法を間違ってしまっているのかも、と考えているのですが、まだ解決していない状態です。
202ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(20,044ポイント)
Date: 2009/03/11(水) 02:02
No:30429
|
|
Title: Re:画像が表示されません
|
|
>>terbさん
ファイル名が合っていても、パスが違うという可能性があります。
プロジェクトからデバッグで実行しても、exeをクリックして起動してもそうですが
画像をロードする時に指定したファイルパスに表示したい画像が置かれていなければなりません。
例えば、「gazou」フォルダの下の「a.png」を表示したいとすると
画像をロードする時に「gazou/a.png」と指定すると思います。
この「gazou/a.png」ですが、前者はプロジェクトから見たパスに、
後者は、exeから見たパスに画像を置いておかなければなりません。
この辺りが大丈夫なのであれば原因は別の所だと思います。
また、DxLibのことはよく分からないのですが、
画像を表示するのにプロジェクトに追加等の設定はいらないような気がします。
(DxLibを使う時に、そのようにしなければならないのでしたらスイマセン。)
369ポイント を手に入れた。
|
|
|
|
|
Name: 朽木 ..ぴよぴよ(752ポイント)
Date: 2009/03/11(水) 15:50
No:30448
|
|
Title: Re:画像が表示されません
|
|
system("dir /B /S");
で表示された実行ファイルのディレクトリが一致しているか確認してみてはどうでしょうか。
デバッグ実行しているのであれば、プロジェクトの設定の[構成]->[デバッグ]の作業ディレクトリを
フルパス(あるいは $(TargetDir) )で入力してしまうとか、Release なのか Debug なのかを確認して、
画像を置くディレクトリを間違えてないか確認してみてください。
日本語ダメとかっていうオチじゃないですよね
147ポイント を手に入れた。
|
|
|
|
|
Name: terb ..ぴよぴよ(515ポイント)
Date: 2009/03/12(木) 00:03
No:30476
| 解決!
|
Title: Re:画像が表示されません
|
|
皆さん回答ありがとうございます。
アドバイスを参考にして色々いじってみたら解決出来ました。
44ポイント を手に入れた。
|
|
|
|
Name: sood ..ぴよぴよ(682ポイント)
Date: 2009/03/11(水) 20:28
No:30468
|
|
Title: 初歩の質問・・・です。。
|
|
ただいま勉強中なのですが、
http://dixq.net/g/
上の31章でいじってたら移動速度が速くなりました><;
ゆっくり動かすにはどうしたらいいですか?
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; //DXライブラリ初期化 エラーが起きたら終了
int i,x1=640-24,x2=0,image[16];
LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ; //画像を分割してimage配列に保存
while(1){
ClearDrawScreen(); //裏画面のデータを全て削除
if( ProcessMessage() == -1 ) break ; //異常がおきたら終了
x1-=3;
x2+=5;
for(i=0;i<100;i++)
DrawGraph(GetRand(640),GetRand(480),image[4],TRUE);//ランダムな場所に画像を描写
if(x1<0) break; //画像1のx座標が0未満になれば終了
ScreenFlip() ;//裏画面データを表画面へ反映
}
WaitKey(); // 何かキー入力があるまで待つ
DxLib_End() ;// DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
682ポイント を手に入れた。
|
|
|
|
Name: 朽木 ..かけだし(1,070ポイント)
Date: 2009/03/11(水) 21:03
No:30469
|
|
Title: Re:初歩の質問・・・です。。
|
|
まずはプログラムを理解することが大切です。
プレイヤーの移動速度はどこかで値で定義されているのではないでしょうか。(ごめんなさいソース見てません)
その変数が使用されている箇所を探し、値が元と違えばそれを直してみれば良いと思います。
それではない、それでもない場合、フレームレートが60以下でなければ、
描画タイミングを書き換えてしまった可能性があります。
フレームレートが60以下になるには、1000 / 60 ミリ秒待つ必要があります。
計算苦手なので自分で計算して値を見比べてください。私と同じくわからなければ、コンパイラに任せます。(※)
私が今この状況で考えられるのはこの位です。お役にたてなかったらごめんなさい@@;
※定数同士の計算はコンパイラが事前に計算してくれることがありますので、
そのまま1000 / 60と書いてしまった方が良いかもしれません。(例: a = 1 + 2 + b; -> 最適化 -> a = 3 + b;)
STGの方かと思ったら全然違かった… 忘れてください@@;;;
318ポイント を手に入れた。
|
|
|
|
|
Name: sood ..ぴよぴよ(715ポイント)
Date: 2009/03/11(水) 21:41
No:30473
|
|
Title: Re:初歩の質問・・・です。。
|
|
速い・・・というより瞬間なんです;;
一瞬パッツと移るだけ・・・(それでも移動はさせてるんですが・・・
33ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(7,879ポイント)
Date: 2009/03/11(水) 21:47
No:30474
|
|
Title: Re:初歩の質問・・・です。。
|
|
規約と注意事項を読みましょう。
ソースを貼る場合はタグを使って投稿しましょう。
原因はある関数を使っているが意味が無いことにあります、
その関数を削除するか意味を持たせましょう。
44ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..かけだし(1,679ポイント)
Date: 2009/03/11(水) 22:21
No:30475
|
|
Title: Re:初歩の質問・・・です。。
|
|
これなんでx1とかx2とか使ってるんですか?
もし画像の座標をx1とかx2にしたいのならDrawGraphで座標を決める時にランダムな値じゃなくて、x1とかを使えばちゃんとなると思いますよ。
2倍のポイントを手に入れた! 130ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(20,918ポイント)
Date: 2009/03/12(木) 01:30
No:30478
|
|
Title: Re:初歩の質問・・・です。。
|
|
>>soodさん
for(i=0;i<100;i++)
DrawGraph(GetRand(640),GetRand(480),image[4],TRUE);//ランダムな場所に画像を描写
ここの第一引数と第二引数がランダムな値になっています。
Xが640まで、Yが480までを、for文で100回処理しています。
この処理は、x1<0 になるまで繰り返されます。
望みどおりの結果になるかどうかは解りませんが、
DrawGraph(x1, x2, image[4],TRUE); とすることで、ランダムな場所に描画は避けられると思います。
162ポイント を手に入れた。
|
|
|
|
|
Name: 木霊 ..プログラマー(32,219ポイント)
Date: 2009/03/12(木) 02:08
No:30481
|
|
Title: Re:初歩の質問・・・です。。
|
|
描画先を裏画面に指定していた関数を消してしまっているようです。
SetDrawScreen ( DX_SCREEN_BACK );
をwhileループの前に入れてください。
また、裏画面に描画された画像は
ScreenFlip ();
が実行されるまで表示されません。
2倍のポイントを手に入れた! 162ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..中級者(14,755ポイント)
Date: 2009/03/12(木) 06:22
No:30482
|
|
Title: Re:初歩の質問・・・です。。
|
|
直接の原因は「for文」です。for文(というか文全般)の用法を確認してみましょう。
24ポイント を手に入れた。
|
|
|
|
|
Name: sood ..ぴよぴよ(683ポイント)
Date: 2009/03/12(木) 08:05
No:30485
|
|
Title: Re:初歩の質問・・・です。。
|
|
そうでしたか。。
みなさんありがとうございました><;
32ポイント を落としてしまった。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,008,813ポイント)
Date: 2009/03/12(木) 08:09
No:30486
|
|
Title: Re:初歩の質問・・・です。。
|
|
上から順番に処理の内容を見てみましょう。
while(1){
ClearDrawScreen(); //裏画面のデータを全て削除
if( ProcessMessage() == -1 ){
break ; //異常がおきたら終了
}
x1-=3;//x1を3少なくする
x2+=5;//x2を5多くする
for(i=0;i<100;i++){//100処理
DrawGraph(GetRand(640),GetRand(480),image[4],TRUE);//ランダムな場所に画像を描写
}
if(x1<0){
break; //画像1のx座標が0未満になれば終了
}
ScreenFlip() ;//裏画面データを表画面へ反映
}
ですよね。
「今何がしたいか」を明確にし、それをまず日本語で書いてみてから、プログラムにすると
解り易いかもしれません。
245ポイント を手に入れた。
|
|
|
|
Name: Ma ..ぴよぴよ(105ポイント)
Date: 2009/03/11(水) 08:42
No:30432
|
|
Title: 59章 セミコロン2個
|
|
以前Mだった者ですが、名前が重なっていたため Ma と改名させていただきました。
Ob->ObChild[s].z = Ob->ToZ - Ob->Zhaba + Ob->Zhaba * s;;
今読んでいたところ、エラーは起きませんし些細なことですが
セミコロンが二つ並んでいましたので報告しておきます。
105ポイント を手に入れた。
|
|
|
|
Name: 朽木 ..ぴよぴよ(176ポイント)
Date: 2009/03/11(水) 11:16
No:30435
|
|
Title: Re:59章 セミコロン2個
|
|
私も同じ経験があります。
コンパイラのソースを見たわけでは無いんですが、
いろんなサイトを調べてみると、コンパイラは';'までを1つの命令(?)と解釈するそうです。
というわけで、私が考えるに、例えば "a = a + b;;" は "a = a + b;" と ";" に分けられて、
コンパイラは次の様に見るんだと思います。多分。
/* "a = a + b;" の部分 */
'=' と '+' を見つける。
'+'の方が優先度が高いので a + b を吐く
次に a = 直前の結果 を吐く
おわり
/* ";" の部分 */
演算子や命令を探すが見つからない
おわり
あとから見て気づいたんですが、
これ、質問じゃなかったんですね・・・@@;;
176ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(69,725ポイント)
Date: 2009/03/11(水) 11:29
No:30436
|
|
Title: Re:59章 セミコロン2個
|
|
微妙に話がずれますが、朽木さんと同等の理由で、仮にセミコロンが、
x = 0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
と、沢山並んでもエラーではありません。
(中には警告やエラーと見なすものもあると思いますが)
ちなみに、
0;
と書いてもエラーにはなりません。
(こちらも警告やエラーと見なすものもあると思います)
豆知識としてどうぞ。
49ポイント を手に入れた。
|
|
|
|
|
Name: SCI ..中級者(14,804ポイント)
Date: 2009/03/12(木) 07:29
No:30483
|
|
Title: Re:59章 セミコロン2個
|
|
;_:;
こんなのもエラーになりませんね。これもコンパイラによって警告等出るかも知れませんが。
49ポイント を手に入れた。
|
|
|
|
Name: stomach ..ぴよぴよ(379ポイント)
Date: 2009/03/11(水) 18:29
No:30459
|
|
Title: RPGでのアイテムについて
|
|
RPGのアイテムについてなんですが、メニュー画面でアイテムの名前をソートして表示したいのですが
なかなか考えつきません。構造体でアイテムの名前、番号、持っている数、種類、効果数値を作ってからアイテム欄を開くときにifで0以上のアイテムの番号を配列に代入して番号をソートしてとまで考えたのですがそこから進みません・・・・・・。アイテム欄は次のように表示したいと思っています。
道具 数
毒消し 3
薬草 5
傷薬 3
高級傷薬 1
毒消しがナンバー 1 薬草がナンバー 2 傷薬がナンバー 3 高級傷薬がナンバー 4です。
ヒントだけでも教えてもらえるとありがたいです。そのやり方よりもこっちのやり方の方が良いというのも有りましたら教えて欲しいです。ご指南よろしくお願いします。
vistaでvisual C++2008 Express Edition DXライブラリ
プログラミング知識はここのゲームプログラミングの館とc,c++の絵本という本を読んだ程度です。
379ポイント を手に入れた。
|
|
|
|
Name: SooA [URL] ..初心者(7,596ポイント)
Date: 2009/03/11(水) 18:50
No:30463
|
|
Title: Re:RPGでのアイテムについて
|
|
>ifで0以上のアイテムの番号を配列に代入して番号をソートして
>とまで考えたのですがそこから進みません
あとは表示するだけじゃないんですか?
・アイテムにIDを振ってある
・所持しているアイテムのみ取得
・ソートした
この後何が進まないのかすみませんが解りません、
上記のどこかで詰まっていると言う事でしょうか?
101ポイント を手に入れた。
|
|
|
|
|
Name: stomach ..ぴよぴよ(546ポイント)
Date: 2009/03/11(水) 19:17
No:30464
|
|
Title: Re:RPGでのアイテムについて
|
|
返信ありがとうございます。
アイテムのIDで名前を表示するというのがなかなか思いつかないのです。
構造体は struck item{
int no;
char name[10];
int stock;
・
・
・
};
という感じのものを考えています。
167ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(7,739ポイント)
Date: 2009/03/11(水) 19:49
No:30465
|
|
Title: Re:RPGでのアイテムについて
|
|
ソートするときに個数やIDでアイテムを探し出しますよね?
その時探し当てた配列番号を記憶します。
単純に書くと以下の様になります。
list[]に格納されるのはアイテムNoではなく
そのアイテムの配列番号である。
for( i=k=0;k<256;k++ )
if( item[k] != 0 )
list[i++] = k;
143ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(7,835ポイント)
Date: 2009/03/11(水) 20:06
No:30466
|
|
Title: Re:RPGでのアイテムについて
|
|
余談ですが、RPGを作成するエディタのように途中でアイテムデータの順番が
変わったりするのでないならItem No = 配列番号とした方が楽ですよ。
それか読み込んだ時にItem No順にデータを
置き換えないとアイテムを使用するたびに格納された番号を
探す羽目になります。
96ポイント を手に入れた。
|
|
|
|
|
Name: stomach ..ぴよぴよ(574ポイント)
Date: 2009/03/11(水) 20:21
No:30467
| 解決!
|
Title: Re:RPGでのアイテムについて
|
|
SooAさんのおかげで解決できました!ありがとうございます!
素早い返信とても助かりました。
28ポイント を手に入れた。
|
|
|
|
Name: ざこ ..プログラマー(31,331ポイント)
Date: 2009/03/10(火) 17:54
No:30404
|
|
Title: コマンドライン引数
|
|
1,【始めに】
こちらからのマルチポストになります。。
http://okwave.jp/qa4784114.html
こちらの掲示板では書き込みできない状態になっておりリンク先を書き込むには誰かのコメントに補足として
書かないといけないのでそれは相手に失礼にも程があるきがしますので控えます。。
これを調べだして2週間ほどになりますが中々希望通りには遠いです。
2,【やりたいこと】
起動をする前にデスクトップ上のアイコン状態の実行ファイルにファイルをドラッグドロップするとそのまま移動する。(私の作っているプログラムの内容は拡張子別にファイルをフォルダに移動させる というものです)
今のままドラッグドロップを行いますと、プログラムが起動状態になるだけです。やりたいことはファイルをドラッグドロップして起動せずそのまま実行するような機能です。起動状態のままファイルをドロップすることはできます。
3,【調べた事】
コマンドライン引数、起動引数 を使う。argcはコマンドライン引数の数、argvは文字列
調べてわかったことがコマンドライン引数を取得してそれを引数に指定する。
4,【わからない事】
●コマンドライン引数を指定するといってもコマンドライン引数自体単体固定じゃないので結局何を指定
すればいいのかわからない。
●どこでどこに指定すればいいのかわからない。
OnDropFilesの引数に指定?と思いましたが違う気がします・・
ここではファイル移動にMoveFileやMoveFileExを使っているのでそれの引数でしょうか?
MoveFile(argv[0],argv[1])なようになるのでしょうか。
※一番上のリンク先に教えていただいた方法を試すとargv[0]には実行ファイルのフルパス名が
arg[1]にはドロップさせたファイルのフルパス名が入っていて、その2つだけでした。
結局どうすればできあがるのかが知りたいです。色々ご教授ください。
609ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(87,154ポイント)
Date: 2009/03/10(火) 18:06
No:30405
|
|
Title: Re:コマンドライン引数
|
|
突っ込みどころ満載ですが...
まずは規約を熟読してください。
リンク先の掲示板でマルチポストが許されていれば
マルチポストはOKとしています。
とあるように、リンク先であるOKWaveはマルチポストが禁止ですので、この掲示板でもマルチポストはNGです。
それはともかく、いちいちマルチポスト先を把握するのも大変なので、必要な情報は全部こちらに再掲してください。
234ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(31,478ポイント)
Date: 2009/03/10(火) 18:16
No:30407
|
|
Title: Re:コマンドライン引数
|
|
失礼ですがOKWAVEでのマルチポスト禁止の記述はどちらに書かれていますか?
>>■マルチポスト
当サイト内において、同一カテゴリーであるかどうかを問わず、同一内容の質問を繰り返し複数投稿する行為は、削除・編集の対象とさせていただきます。同一人物が複数の会員IDを取得した上でそれぞれの会員IDで同一内容の質問を繰り返している場合も含みます。
とありますがこれはOKWAVE内の複数投稿においてと判断しましたが、他にあるのでしょうか?
後、マルチポストについて前々から思ってたんですが本来は同じ質問を複数の掲示板でしまくるのを禁止
する為のものだと思うんですが、OKWAVEで希望のこたえが得られなかった場合その問題は諦めろ ということになりますよね。
147ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(31,699ポイント)
Date: 2009/03/10(火) 18:34
No:30409
|
|
Title: Re:コマンドライン引数
|
|
>>インターネットの世界では、同一内容の投稿を繰り返し行うことはサイトやそれを見る人たちにとって迷惑になるため禁止されています。質問をするときは聞きたいことを明確にした上で一度だけ投稿してください。補足することがあったら新たに投稿するのではなく、いただいた回答への補足として投稿してください。
うーん質問内容は同じでもコピペってわけでもないし、OKWAVEの方で意見くださった方も詳しくでてるとは思うんですけど、私には理解しずらかったかな。OKWAVEの方では回答しても上にいかないんでどんどん下にいきますから閲覧者が減ります。もう1回同じ質問をするとマルチポストです。私に最初回答してくださった方も途中からいなくなってしまってどうしようかとなやんでいました
ネチケットはあくまでネチケットで禁止されてるわけじゃないと判断したんですけどね。
2つに分けられてる理由が他に見当たらない。
ソースなんてありましたっけ?
丁寧な解説はありましたけど、あれだけじゃ私には回答へ導けませんでした。>バグさん
内容は同じでもわからないことや調べた事とか色々含めて考慮して書いてるしこれはマルチポストになるのでしょうか?もちろんOKWAVEでの質問も若干活かされています。これがもしなるのならば希望の回答があるかどうかは
掲示板に祈りましょう。その掲示板で希望の回答がなかったら諦めろということになりますが。
管理者様もしみていたら回答ください
221ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(87,203ポイント)
Date: 2009/03/10(火) 20:29
No:30411
|
|
Title: Re:コマンドライン引数
|
|
> ネチケットはあくまでネチケットで禁止されてるわけじゃないと判断したんですけどね。
OKWaveでは、マルチポストは「違反項目」として運営スタッフへの報告を求めています。
つまり、実質的に禁止です。
> これはマルチポストになるのでしょうか?
ご自身で
> こちらからのマルチポストになります。。
と書いていますね。マルチポストという認識があったのでは?
そもそも、形式的にどうであるかではなく、マルチポストがなぜ問題になるのかを考えてみてください。
OKWaveで丁寧に回答してくれているchie65535さんにお礼も補足も付けずに、他の掲示板に乗り換えるのはマルチポストそのものです。
49ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(32,039ポイント)
Date: 2009/03/10(火) 20:40
No:30412
|
|
Title: Re:コマンドライン引数
|
|
なるほど、それは確かにそういう考えもありますね。私も反省しなければいけません。しかしそう仰られるならお礼や補足をちゃんとつけてればOKってわけじゃないでしょう? OKWAVEで解決できなかった問題をどうすればいいのか という私の根本的な問題に何の解決にもなっておりません。私自身マルチポスト って項目に深く理解してるわけではございません。引っかかるかな?という認識です。ただたかぎさんが仰られたようなことは、はっ とさせられました。OKWAVEでは多重投稿も禁止されています。私があの問題に対しスレを立てられるのはあのスレ1つだけということです。しかし私の問題にも若干目を向けていただきたいです。それに失礼ですが私はサイトにきっちり【禁止】やサイト主様から直接受け賜った場合にのみそういう解釈にしています。報告を求めているからといって私は禁止だな という解釈には変更になりません。しかし重要なことですのでさっそくOKWAVE管理者様に何らかの連絡手段をとり質問してみたいと思います。
340ポイント を手に入れた。
|
|
|
|
|
Name: toyo ..プログラマー(27,170ポイント)
Date: 2009/03/10(火) 20:47
No:30413
|
|
Title: Re:コマンドライン引数
|
|
OKWave(教えてgoo)は私も毎日見てますしここの回答者も結構ダブってると思います(jactaさんは明らかですしdixqさんも何回か質問されてますね)。
他のC言語掲示板も結局回答者は同じ人だったりします。
まあ同じジャンルなら質問者がマルチする掲示板は回答者も巡回してるものでマルチポストする意味はあまりないですね。
今回の質問も向こうの質問は見てましたし妥当な回答が出てたので特に回答はしませんでした。
マルチに関してはOKWaveのほうを締め切れば問題ないかなと思いますが。
164ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(19,639ポイント)
Date: 2009/03/10(火) 20:54
No:30414
|
|
Title: Re:コマンドライン引数
|
|
>ざこさん
横からこういうことを言うのなんですが、
「多重投稿(マルチポスト)はしないようにしましょう」と、
バグさんが提示されているリンク先にありましたが、それでも禁止と言う解釈にはならないのでしょうか。
149ポイント を手に入れた。
|
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(87,503ポイント)
Date: 2009/03/10(火) 21:04
No:30415
|
|
Title: Re:コマンドライン引数
|
|
このやりとりを繰り返される以上、解決は無理だと思いますが...
> しかしそう仰られるならお礼や補足をちゃんとつけてればOKってわけじゃないでしょう?
はい、OKではありません。
この掲示板の利用規約では、
しかし、ここでは相互リンクし、リンク先の掲示板でマルチポストが許されていれば
マルチポストはOKとしています。
となっていますので、OKWave側でもこちらへのリンクを貼ることが必須です。
しかし、マルチポストを認めてもらうためのリンクが許容されるかどうかはかなりグレーな部分があります。
また、仮に前述の回答にお礼や補足を行ったとしてもそれで終わりではなく、その後に双方のサイトで書き込まれたコメントに対して、遅滞なく対応すべきです。
普通はそれができないから、マルチポストは禁止されるのです。
> OKWAVEで解決できなかった問題をどうすればいいのか という私の根本的な問題に何の解決にもなっておりません。
OKWaveだからどうこうではなく、得られた回答でアドバイスされたことを自分なりに試してみて、それでも駄目なら、どのように試してどう駄目だったのかを説明すべきです。
それができなければ、どこへ行っても無駄です。
もし、代わりにプログラムを作って欲しいでのあれば、3月16日(丸投げ解禁日)以降にOKWaveで再質問するとよいでしょう。あるいはお金を払って外注するかです。
300ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(32,494ポイント)
Date: 2009/03/10(火) 21:07
No:30416
|
|
Title: Re:コマンドライン引数
|
|
今さっき運営に質問メールを送りました。私が納得できないのはさんざんいっていますが
OKWAVEで解決できなかった問題は諦めるか 自力で解くしかないのか ということです。
掲示板によっては回答が極端に少ない所もありますよね。そこだけが納得できないのです。
何度も同じ質問をするな というのは激しくよくわかるんですけどね。
>BEMANIさん
私は自分の都合のいいように解釈してるわけじゃないです。今回はたまたまそうだっただけで、初めマルチポストってのを意識する前から利用規約、ネチケットを見たとたんこう思いました。他人の文章をどう解釈するのかは人それぞれです。私が間違っている可能性も否定できません。ただ私も上記の内容で納得できなくて、
若干自分の思うように解釈しようとしているのかもしれません。何日ぐらいかかるかわかりませんが、返信を待ちます。どうせこのままでは回答は誰もしていただけないと思います。とりあえず返信が着たら必ずお知らせし、内容を報告させていただきます。それまで今しばらくお待ち下さい。
455ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(32,615ポイント)
Date: 2009/03/10(火) 21:17
No:30417
|
|
Title: Re:コマンドライン引数
|
|
>OKWaveだからどうこうではなく、得られた回答でアドバイスされたことを自分なりに試してみて、それでも駄目なら、どのように試してどう駄目だったのかを説明すべきです。
それができなければ、どこへ行っても無駄です。
確かに、若干勝手な判断でしたね。この板で質問したことを補足にて書くべきでした。
しかしどこへいっても無駄かどうかは本人次第です。
121ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(32,682ポイント)
Date: 2009/03/10(火) 21:20
No:30418
|
|
Title: Re:コマンドライン引数
|
|
たかぎさんへ
私の行為が違反かどうかはメールでの返信をお待ちいただきたい。まだ推測の域を出ません。全ての対応はそれからだと思います。もしも私がお知らせする返信内容が疑わしいようならば、質問内容をのせますので同様のご質問をしてください。
67ポイント を手に入れた。
|
|
|
|
|
Name: 初級者 ..入門者(4,262ポイント)
Date: 2009/03/10(火) 21:36
No:30419
|
|
Title: Re:コマンドライン引数
|
|
とりあえず、OKWaveでのやりとりにけりをつけたらいかがでしょうか。
クローズするなりなんなりして。
# マルチポストですって、自ら表明して投稿するのも珍しい…。
52ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(153,764ポイント)
Date: 2009/03/10(火) 21:46
No:30421
|
|
Title: Re:コマンドライン引数
|
|
うーん、微妙に論点がずれてるような…?(^_^;)
たかぎさんの言われているのは…
1:せっかくアドバイスを戴いたのだから、まずは自分なりに試してみては?
2:そのうえで理解できない、もしくはアドバイスそのものが理解できないのであれば、再度質問するようにしませんか?
3:自分で理解しようとする努力(2番の事です)を放棄しては、自分の為にならないし、何処の掲示板で誰に聞いても同じ事の繰り返しだと思いますよ。
という事だと思うんですよ。前にも書きましたが、OkWaveでの回答は非常に丁寧です。ぶっちゃけ、ほとんど解答そのものだと思いますよ。一度じっくり解析してみてはいかがでしょうか?
300ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(32,887ポイント)
Date: 2009/03/10(火) 22:06
No:30422
|
|
Title: Re:コマンドライン引数
|
|
若干自分勝手な見解になりますが、私が本当に聞きたかったのはこちらの質問させていただいた内容だったんだと思います。それに気づいたのが書きながら ですか。ただ質問しなおすには若干かけ離れていた ように感じました。それとOKWAVEの掲示板特性上と合わせた結果こういうことしてしまったのだと思います。ただバグさんやtoyoさんにあれが全て と言われるまであくまで理解する為の予備知識 という見解でした。これは未熟といわざるをえないですね。。 このようなことになってしまったのでとりあえずお詫びとお礼をして質問は締めておきました。
後OKWAVEの件がマルチポストになるか どうかはたかぎさんの論題とは関係なく今後も重要だと思います。
真偽を明らかにしといたほうがいいのでは?と思いますね
188ポイント を手に入れた。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(55,015ポイント)
Date: 2009/03/11(水) 17:08
No:30449
|
|
Title: Re:コマンドライン引数
|
|
質問の回答しておきますね。
> 起動せずそのまま実行するような機能です
無理です。
アプリケーションの起動をしなければ何も実行することは出来ません。
拡大解釈してウィンドウを出さずにコピー処理だけを行いたい、というのであれば出来ます。
ざっと読んだとことざこさんはMFCでプログラミングされたアプリケーションが、どのように実行されているのかご理解されていないように思いますが、アプリケーションが起動されてから、最初のウィンドウが表示されるまで、どういうふうに実行されているか理解されておられますか?
コンソールアプリではmain関数から、WindowsアプリケーションではWinMainから開始します。
MFCもWindowsアプリケーションなのでWinMainから開始しますが、WinMainはMFCによってラッピングされているのでプログラマが手を加えることは出来ません。
では、プログラマが触れる中で、一番最初に実行されるとことはどこなのか?
その辺が理解できれば、リンク先のchie65535の回答で解決できるでしょう。
#
OK Waveのchie65535のお礼だけど、下2行はchie65535さんがこちらでの経緯を知らなければ意味不明ですね。
私だったら、「この質問の続きは以下の掲示板でさせていただきます。」と書いてこのスレのアドレス張ってきますが。
88ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(34,775ポイント)
Date: 2009/03/11(水) 17:18
No:30451
|
|
Title: Re:コマンドライン引数
|
|
すいません、アドはるの忘れていて気付いたときには時既に遅しというやつで書き込めませんでした・・
なるほど私がしたい事はまさにMistさんの仰るものですね。
一番最初に実行される所、IniInstance or InitDialog でしょうか
87ポイント を手に入れた。
|
|
|
|
|
Name: ざこ
Date: 2009/03/15(日) 18:18
No:304041237108729
| 解決!
|
Title: Re:コマンドライン引数
|
|
問題解決できました。
後OKWAVEからの回答も私の行動は問題ないとのことでしたので
色々と論議した結果、きちんと対応を怠らないことが条件ですが
OKWAVEからこちらのマルチポストは問題ないと言う結果になりました。
といっても皆様がそういう意見だったということで正しいかどうかはわかりません。
|
|
|
|
Name: あ〜る ..かけだし(1,400ポイント)
Date: 2009/03/11(水) 00:16
No:30425
|
|
Title: またプログラミングには関係ありませんが…
|
|
オススメの音楽製作ソフトってありますか?
東方と同じクオリティ…とまではいかなくても普通にBGMとして使える程度のでもいいんで
あと、出来ればフリーで…(ぉぃ
74ポイント を手に入れた。
|
|
|
|
Name: BEMANI ..上級者(19,675ポイント)
Date: 2009/03/11(水) 01:31
No:30428
|
|
Title: Re:またプログラミングには関係ありませんが…
|
|
>>あ〜るさん
普通のBGMのクオリティと言うのが良く解りませんが、
どのような方法で作曲を考えてらっしゃいますか?
36ポイント を手に入れた。
|
|
|
|
|
Name: SooA [URL] ..初心者(7,238ポイント)
Date: 2009/03/11(水) 06:19
No:30430
|
|
Title: Re:またプログラミングには関係ありませんが…
|
|
http://www.tkb-soft.hmcbest.com/
MML、MIDIシーケンサ、音符入力、サンプリング入力、色々有りますが、
初心者が扱いやすいフリーウェアと言うことで、
上記のサイトのMIDIシーケンサ『Domino』をお勧めします。
音を聴きながらノートを配置して長さを変えるだけで作れます。
勿論音色の設定やら覚えることは一杯ありますが、
基本的な部分がシンプルなので楽だと思います。
Domino 起動後にF1キーを押すとマニュアルが表示されるので、
確認しながら初期設定を行ってください。
音源は外部MIDI音源を持っていないなら
ソフトウェアMIDI の Microsoft GS Wavetable が
入っていると思うのでそちらを選択します。
273ポイント を手に入れた。
|
|
|
|
|
Name: 桃印 ..初心者(8,218ポイント)
Date: 2009/03/11(水) 08:11
No:30431
|
|
Title: Re:またプログラミングには関係ありませんが…
|
|
SooAさんの仰るとおり、Dominoは入門としてちょうど良いのでこれから始めてみてはいかがでしょうか。
あ、でももしあ〜るさんが既に結構な音楽知識(でいいのか?)があるのなら、フリーウェアですが有料モノに負けないぐらい多機能なMusic Studio Producerなんかもオススメです。
http://www.frieve.com/musicstd/
また、音源についてですが、標準のGS音源だとちょっと地味でBGMにするにはいまいちかもしれません。
ちょっとググれは分かるのですが、フリーでYAMAHAのXG音源というものがダウンロードできます。導入方法も簡単で、GSからワンランク上の音源なので是非試してみてはいかがでしょうか。
あとは「サウンドフォント」と呼ばれる、フリーの音源です。自作やエミュレートで寄せ集めた音源で(くわしいことは私も良く分からないんですが;)、フリーなのに高品質な音源がかなりあります。一部では「ZUN氏の音源を再現したサウンドフォント」などもあるそうな。
ただ、こちらは導入方法が結構複雑なので注意してください。私はここで諦めてフリー素材BGMに走りました……orz
えっと、どなたか詳しい導入方法を知っている方はいませんかね?
419ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(20,756ポイント)
Date: 2009/03/11(水) 10:24
No:30434
|
|
Title: Re:またプログラミングには関係ありませんが…
|
|
>>あ〜るさん
フリーと言ってますし、DTM(PC上で音楽を作曲する)なんですかね・・・
音楽を作る時は、録音でもしない限り音楽データはMIDI(.mid)データになります。
このMIDIをWAVEに出力したり、mp3・ogg等に変換し、音楽として使用するかと思います。
(MIDIを鳴らすのであればWAVE出力や変換は要りません)
MIDIの作成でしたら、SooAさんや桃印さんが仰ったソフトがいいと思います。
自分は色々使って「Cherry」に落ち着きました。
解説サイトさんも合わせ、あ〜るさんが使いやすいものを選ぶといいかと思います。
XG音源・GS音源ですが、どっちがいいという訳ではありません。
それぞれには得意とする音色・不得意とする音色が存在し、聴く人からの意見でも変わってくると思います。
自分はGS大好きです。
ちなみに、MIDIデータで扱われる音色はユーザーのPCに依存します。
いくら自分の所で綺麗に聴こえていたとしても他のPCで、そうは聴こえないというのがあります。
(XGで作って、聴く時はGS・GMだったみたいな感じです。)
この問題を解決するためにMIDIをWAVEに出力する方法があります。
・・・というかこの方法しか自分は知りません。
MIDIをWAVEに出力する際、WinAmp等のソフトでWAVE出力したり、
独自で音源(音色)をカスタマイズできるSoundFontと呼ばれるものがあります。
WAVEデータにしてしまうと環境依存しない音楽が出来上がります。
(・・・と書くと何か間違ってるような気もしますが。)
SoundFontの量は莫大にあるので、自分に合った音源を探すのにかなり苦労すると思います。
しかし一度集めたお気に入りのSoundFontがあれば末長く使っていけます。
(音色によりますが、市販の音源と比べて負けず劣らずにまで仕上げられるかと。)
参考までに自分が使っている音楽作成ソフトを挙げておきます
・Cherry(MIDI制作用)
・TiMidity++(SoundFontを使用してWAVEファイルを出力する用)
・SoundEngine Free(必要に応じてWAVEファイルをいじる)
・WAVEをmp3やoggに変換するソフト
後は作った音楽をゲーム中で使うという流れです。
これらは全てフリーで手に入れることが可能です。
SoundFontをうまく集めることが出来れば東方の音源と言わず、
更にクオリティの高い音質も手に入れることが可能だと思います。
覚えることは沢山ありますが頑張ってください。
712ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(69,829ポイント)
Date: 2009/03/11(水) 11:36
No:30437
|
|
Title: Re:またプログラミングには関係ありませんが…
|
|
VSTi プラグインの存在も忘れないであげてください。
…とはいっても、 VSTi に対応しているフリーソフトが少ないので、今回の場合はサウンドフォントの方が手軽で良いかもしれません。
(私は市販である Singer Song Writer と 無料の VSTi プラグインを複数使用して音楽製作を行なってます)
一応 VSTi プラグイン経由でサウンドフォントを鳴らせるものがあるそうです。
104ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..かけだし(1,549ポイント)
Date: 2009/03/11(水) 13:03
No:30441
|
|
Title: Re:またプログラミングには関係ありませんが…
|
|
みなさん度々ありがとうございます。
いっぱい種類があるもんですねぇ、Dominoぐらいしか知りませんでした…
とりあえず教えて貰った物を一通り試して自分が一番使いやすいのを見つけます、教えて下さってありがとうございました!
64ポイント を手に入れた。
|
|
|
|
Name: にゃん太郎 ..ぴよぴよ(13ポイント)
Date: 2009/03/09(月) 11:28
No:30316
|
|
Title: osについて
|
|
こんにちは、C言語とは関係ないのですが、OSについてわからないことがあるので、回答お願いします。
ちなみに、私はパソコンあまり詳しくないです。
テキストに「0Sの管理下で実行されるプログラムのことをアプリケーション・プログラムと呼びます。
アプリケーションから0Sの機能を呼び出すことをシステム・コールと呼びます。また、OS側に用意されている
アプリケーションとの連携用の命令群をAPIと呼びます」とありましたが、具体的に、これらは、どんな働きをするのでしょうか?
13ポイント を手に入れた。
|
|
|
|
Name: たかぎ [URL] ..比類無きプログラマー(86,843ポイント)
Date: 2009/03/09(月) 16:17
No:30331
|
|
Title: Re:osについて
|
|
背景情報がまったくないので、どう回答してよいのかわかりません。
> 私はパソコンあまり詳しくないです。
そう言われると、ここでいうOSは汎用機や組込みシステム等の非PC環境のOSの可能性がありますね。
> 0Sの管理下で実行されるプログラムのことをアプリケーション・プログラムと呼びます。
「テキスト」というのが具体的に何を指すのか分かりませんが、アプリケーション・プログラムというのは必ずしもOSの管理下で実行されるわけではありません。
何に対するアプリケーションかによって変わってきます。
149ポイント を手に入れた。
|
|
|
|
|
Name: 朽木 ..ぴよぴよ(359ポイント)
Date: 2009/03/11(水) 12:18
No:30439
|
|
Title: Re:osについて
|
|
OSは、コンピュータと繋がっているハードウェア(ハードディスク、マウス、キーボードなどなど)を
管理したり、マルチタスク(同時に複数のソフトやゲームを動かすことができる)に対応しているOSであれば、
複数のタスクをタイムシェアリングさせて同時に実行しているように動かします。
システムコールとAPIの違いですが、私自身も曖昧ですので参考程度に…
システムコールは、OS(カーネル)に組み込まれているルーチンを呼ぶためのものです。
APIは、「Application Programming Interface」の略で、「何か」を使ってプログラミングするためのものです。
「何か」とは、C言語のライブラリで言えば 関数 や マクロ のことです。
183ポイント を手に入れた。
|
|
|
|
Name: 昴 ..ぴよぴよ(574ポイント)
Date: 2009/03/05(木) 08:20
No:30022
|
|
Title: 文字列とポインタ
|
|
こんにちは。
c言語は初心者で、今テキストを見ながら進めています。
下記のプログラムは読み込んだ英文字以降の文字列を表示するプログラムです。
#include <stdio.h>
char *str_chr(const char *str, int c);
int main(void)
{
char str[10], *p;
char uletter[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
printf("英大文字を入力してください:");
scanf("%s", str);
p = str_chr(uletter, str[0]);
if (p != NULL) {
puts(p);
}
return 0;
}
char *str_chr(const char *str, int c)
{
for ( ; *str; str++) {
if (*str == c) {
return ((char *)str);
}
}
return (NULL);
}
・for ( ; *str; str++)は想像的に文字列の先頭文字を走査していると(?)思うんですけど、
これはfor (i = 0; *str[i] != '\0'; i++) と解釈してもよろしいのでしょうか?でも、その場合
だとint i;が宣言されていないですよね…?
・return ((char *)str);
これは一致した英大文字のアドレスを返すということなのでしょうか?
また、その場合どうしてこのような式になるのでしょうか?
よろしければ、アドバイスをお願いします。
574ポイント を手に入れた。
|
|
|
|
Name: kazuoni [URL] ..熟練のプログラマー(68,742ポイント)
Date: 2009/03/05(木) 08:46
No:30024
|
|
Title: Re:文字列とポインタ
|
|
>これはfor (i = 0; *str[i] != '\0'; i++) と解釈してもよろしいのでしょうか?
インクリメントするっというところは同じですが、
何をインクリメントしているのかが違います。
iはint型、strはcharのポインタ型です。
str="ABC"だとしたら初めは'A'へのアドレスをstr_chrの第一引数に渡しますので、
str++は'B'へのアドレスになります。
>また、その場合どうしてこのような式になるのでしょうか?
キャストという用語を調べてみてください。
また、return strでコンパイルしてみると、どうなるか、一度試してみてください。
52ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(38,326ポイント)
Date: 2009/03/05(木) 09:48
No:30031
|
|
Title: Re:文字列とポインタ
|
|
>これはfor (i = 0; *str[i] != '\0'; i++) と解釈してもよろしいのでしょうか?
ダメです。
参考までに。
char *str_chr(const char str[], int c)
{
int i;
for (i=0; str[i]; i++) {
if (str[i] == c) {
return ((char *)&str[i]);
}
}
return (NULL);
}
143ポイント を手に入れた。
|
|
|
|
|
Name: 昴 ..ぴよぴよ(647ポイント)
Date: 2009/03/06(金) 10:39
No:30115
|
|
Title: Re:文字列とポインタ
|
|
こんにちは、回答ありがとうございます。
キャストという用語を調べてみました。(型)式:式の値を型に変換するという意味ですね。
この場合、どうしてキャストをする必要があるのでしょうか?
73ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(67,267ポイント)
Date: 2009/03/06(金) 10:46
No:30116
|
|
Title: Re:文字列とポインタ
|
|
今回の場合だと、 const のついた型からついていない型にキャストしています。
この const とは、読み取り専用の型を示しています。
このとき、戻り値が char* 型に対し、返したい型の方は const char* ですので、
読み取り専用の型を読み書きできる型に変換するために、
このようなキャスト処理をしています。
2倍のポイントを手に入れた! 246ポイント を手に入れた。
|
|
|
|
|
Name: 昴 ..ぴよぴよ(477ポイント)
Date: 2009/03/06(金) 11:46
No:30118
|
|
Title: Re:文字列とポインタ
|
|
>この const とは、読み取り専用の型を示しています。
>このとき、戻り値が char* 型に対し、返したい型の方は const char* ですので、
>読み取り専用の型を読み書きできる型に変換するために、
>このようなキャスト処理をしています。
・この読み取り専用の型(const)が、どうしてここで使われているのですか?
・返したい型はconst char*ですよね?でも、プログラムでは(char)になっています。
すいません、よかったら、もう少し詳しく説明を頂ければ嬉しいです。
170ポイント を落としてしまった。
|
|
|
|
|
Name: 昴 ..ぴよぴよ(526ポイント)
Date: 2009/03/06(金) 11:47
No:30119
|
|
Title: Re:文字列とポインタ
|
|
すいません、訂正です。
・返したい型はconst char*ですよね?でも、プログラムでは(char *)strになっています。
49ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(67,823ポイント)
Date: 2009/03/06(金) 12:03
No:30120
|
|
Title: Re:文字列とポインタ
|
|
> ・この読み取り専用の型(const)が、どうしてここで使われているのですか?
読み取り専用の型の変数は、その変数を利用して値を変更することが出来ないという保障が原則としてついています。
関数の引数で const のポインタ型を使用することで、関数内でポインタで参照された値が変更されない
ということを保障していることになります。
str_chr は、指定した文字を探すだけで、値を変更する必要が無いので、 const が付いています。
> ・返したい型はconst char*ですよね?でも、プログラムでは(char *)strになっています。
関数の宣言は、
char *str_chr(const char *str, int c);
となっていて、戻り値の型は str_chr の前に記されています。
つまり、返したい(返される)型は char * です。
220ポイント を手に入れた。
|
|
|
|
|
Name: 昴 ..ぴよぴよ(838ポイント)
Date: 2009/03/06(金) 12:45
No:30123
|
|
Title: Re:文字列とポインタ
|
|
御津凧さん、ご回答丁寧にありがとうごさいました。
ちょっと、質問があるのですが、
下記のプログラムは文字列strの中に、文字cが含まれている個数調べるプログラムです。
#include <stdio.h>
int str_chnum(const char *str, int c)
{
int count = 0;
while (*str) {
if (*str++ == c) {
count++;
}
}
return (count);
}
int main(void)
{
char str[256];
char ch[10];
printf("文字列を入力してください:");
scanf("%s", str);
printf("検索する文字を入力してください:");
scanf("%s", ch);
printf("その文字は%d個含まれています。\n", str_chnum(str, ch[0]));
return 0;
}
・この場合、return ((int)count)でも、実行できました。ということは、この場合は省略可能ということですよね?
・先ほどのプログラムだと、retun (str)で実行してみると、一応実行できたのですが、警告:問題のあるポインタ変換と表示されました。この場合、どうして(char *)を省略すると警告が表示されるのですか?
312ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(68,283ポイント)
Date: 2009/03/06(金) 13:03
No:30124
|
|
Title: Re:文字列とポインタ
|
|
> ・この場合、return ((int)count)でも、実行できました。ということは、この場合は省略可能ということですよね?
そうです。元々 count は int 型なので。
float 型や double 型の浮動小数点型から変換する場合等は、
警告を言われる場合がありますので、その時はキャストしたほうが良いです。
> 警告:問題のあるポインタ変換
上記に書いた場合もそうですが、警告なので、
コンパイラが判断した(暗黙的)キャストは行なっています(コンパイルされる)が、
これは意図したものですか?と注意を促しているものです。
return (str) での警告は、コンパイラが読み取り専用の型を勝手に読み書きできる型に変換しているため、
「問題のあるポインタ変換をしました」と、警告を表示しています。
このポインタ変換が問題ないのであれば、この警告を消すために、
return ((char *)str) と、(明示的)キャストを行なう必要があります。
225ポイント を手に入れた。
|
|
|
|
|
Name: 昴 ..ぴよぴよ(997ポイント)
Date: 2009/03/06(金) 14:23
No:30127
|
|
Title: Re:文字列とポインタ
|
|
御津凧さん、ご丁寧な回答ありがとうございます。
今までの文章を何度か読んでみたのですが、分かるような分からないような感じです。
p = str_chr(uletter, str[0]);
内のこの p の中にはstr_chr関数から返されるアドレスが格納されるのですよね?
たとえば、検索する文字 F を入力するとその値のアドレスがPに格納されるのですか?
159ポイント を手に入れた。
|
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(68,707ポイント)
Date: 2009/03/06(金) 15:12
No:30129
|
|
Title: Re:文字列とポインタ
|
|
> たとえば、検索する文字 F を入力するとその値のアドレスがPに格納されるのですか?
P ではなく、 p ですね。
正確に言えば、検索する文字の位置を示すポインタが格納されます。
このとき、検索対象の文字列 str は、読み取り専用として関数に渡されます。
そして、戻り値はその str の中で見つけた文字の位置を示し、読み書き可能な型にキャストされて返されています。
単純にこの関数を使用した例を示すと、
int main( void ){
char str1[32] = "TEST TEXT."; // 書き換え可能な文字列
const char *str2 = "CONST TEXT."; // 読み取り専用の文字列
char *ret; // str_chr 関数からの戻り値を受け取る変数。
ret = str_chr(str1,'.'); // str1 から '.' を検索。
*ret = '!'; // 検索された文字を '!' に変更。
printf("str1:%s\n",str1); // str1 を出力。"str1:TEST TEXT!"となる。
ret = str_chr(str2,'.'); // str2 から '.' を検索。
*ret = '?'; // 検索された文字を '?' に変更。
printf("str2:%s\n",str2); // str2 を出力。"str2:CONST TEXT?"となる。
return 0;
}
このようになります。
str2 は、読み取り専用で初期化されているはずなのに、変更できてしまっています。
つまり、今回のキャストの場合では、処理上は問題なくても、
読み書きできる型に変更したというだけの違いだけです。
なので、
const char *str_chr(const char *str, int c);
としても処理に問題はありませんが、上記のプログラムでは
読み取り専用型の値を読み書き可能型の値に代入しようとしているので、
コンパイルエラー(あるいは警告)になります。
# ちなみに、私は御津凪(みつなぎ)です。御津凧じゃないです。
424ポイント を手に入れた。
|
|
|
|
|
Name: 昴 ..かけだし(1,037ポイント)
Date: 2009/03/09(月) 18:36
No:30340
|
|
Title: Re:文字列とポインタ
|
|
大変、失礼致しました、御津凪さん。
あと、丁寧な回答ありがとうございました。
40ポイント を手に入れた。
|
|
|
|
|
Name: 昴 ..かけだし(1,067ポイント)
Date: 2009/03/10(火) 15:04
No:30386
|
|
Title: Re:文字列とポインタ
|
|
char *str_chr(const char *str, int c);
この関数名の前にどうして、*が付くのでしょうか?
30ポイント を手に入れた。
|
|
|
|
|
Name: 昴 ..かけだし(1,021ポイント)
Date: 2009/03/10(火) 15:30
No:30388
| 解決!
|
Title: Re:文字列とポインタ
|
|
>char型のポインタを戻り値にするから。
回答ありがとうございました。基本的なこと忘れてました・・・
46ポイント を落としてしまった。
|
|
|
|
|
Name: Mist ..熟練のプログラマー(54,927ポイント)
Date: 2009/03/10(火) 15:40
No:30389
|
|
Title: Re:文字列とポインタ
|
|
関数名に*が付いているんじゃなくて、charに*が付いているんです。
だから本来は
char* str_chr(const char *str, int c);
なんです。
でも、ポインタの変数を宣言するときに
char *p;
と変数名のほうに*を付けて書きますよね。
それと同じように書いたために関数名のほうに*が付いているんです。
本来は以下のように書くべきなのですが、
char* p,q;
C言語の仕様のおかしなところでこう書くとpはchar型ポインタになりますが、qはただのchar型になってしまいます。
そのため、C言語プログラマは間違えないように変数のほうに*を付けるようになってしまったのです。
152ポイント を手に入れた。
|
|
|
|
|
Name: 昴 ..かけだし(1,067ポイント)
Date: 2009/03/10(火) 16:02
No:30390
|
|
Title: Re:文字列とポインタ
|
|
すいません、もう一つだけ。
p = str_chr(uletter, str[0]);
このポインタpにはstr_chr関数の中で一致した英大文字が指すアドレスが入るのですか?
46ポイント を手に入れた。
|
|
|
|
|
Name: non ..プログラマー(38,426ポイント)
Date: 2009/03/10(火) 18:12
No:30406
|
|
Title: Re:文字列とポインタ
|
|
>一致した英大文字が指すアドレスが入るのですか?
書き間違いだとは思いますが・・・
一致した英大文字が格納されている場所のアドレスが入るのです。
73ポイント を手に入れた。
|
|
|
|
Name: ざこ ..プログラマー(29,417ポイント)
Date: 2009/03/10(火) 10:25
No:30365
|
|
Title: プログラム
|
|
void CKodomo1Dlg::OnOK()
{
CString str_ed1;
CString str_ed2;
FILE *fp;
m_ed1.GetWindowText(str_ed1);
m_ed2.GetWindowText(str_ed2);
*m_pstr=str_ed1;
*m_qstr=str_ed2;
*chk1=m_chk.GetCheck();//ココ
if(strlen(str_ed1)==0||strlen(str_ed2)==0){
MessageBox("空白があります");
return;
}
if(Flag==FALSE){
if((fp=fopen(str_ed2,"r"))==NULL){
MessageBox("そのファイルはコンピューター内に存在しません");
m_ed2.SetWindowText("");
return;
}
}
CDialog::OnOK();
}
※ダイアログBのクラスCKodomo1クラスでCKodomoのヘッダは
public:
CKodomo1Dlg(CWnd * pParent=NULL)
CString *m_pstr;
CString *m_qstr;
int *chk1;
int* m_FILEOK;
です。
void CDragDrop6Dlg::OnDropFiles(HDROP hDropInfo)
{
long files;
int FILEOK;
char filename[256];
CchkDialog cdlg;
cdlg.m_FILEOK=&FILEOK;
// int n;
CString str_index;
files=DragQueryFile(hDropInfo, 0xFFFFFFFF,filename,256);
DragQueryFile(hDropInfo, 0, filename,256);
CString Cname=getFileName(filename);
CString kaku;
int index=-1;
CKodomo1Dlg dlg;
i=m_listC.GetItemCount();
kaku=strchr(filename,'.');
dlg.chk1=&chk;
//for( int index=0;index<i;index++){
while((index=m_listC.GetNextItem(index,LVNI_ALL))!=-1){
str_index=m_listC.GetItemText(index,0);
CString str_index2=m_listC.GetItemText(index,1);
CString Rname=str_index2+"\\"+Cname;
if(kaku=="."+str_index){
// n=index;
cdlg.DoModal();
if(FILEOK==1){
if(chk==1){
MessageBox("上書きされます");
MoveFileEx(filename,str_index2,MOVEFILE_REPLACE_EXISTING);
MoveFileEx(filename,str_index2+"\\",MOVEFILE_REPLACE_EXISTING);
MoveFileEx(filename,Rname,MOVEFILE_REPLACE_EXISTING);
}
else{
MoveFile(filename,str_index2);
MoveFile(filename,str_index2+"\\");
MoveFile(filename,Rname);
}
}
}
else if(kaku!="."+str_index){
}
}
}
以前よりご質問させていただいてたプログラムの一部なんですがコメントの位置、つまり
*chk1=m_chk.GetCheck(); で止まってしまいます。
これはダイアログAの「追加ボタン」を押すとダイアログBが出現し今ダイアログBにいます。
ダイアログBの関数OnOKでチェックボックスのチェックの有無をAに伝えようとしています
。何故エラーになるのでしょうか。エラー内容は
"問題が発生しました。 プログラムを終了します" です。おしえてください
178ポイント を手に入れた。
|
|
|
|
Name: Blue ..初心者(7,105ポイント)
Date: 2009/03/10(火) 11:15
No:30366
|
|
Title: Re:プログラム
|
|
>dlg.chk1=&chk;
chkってどこに宣言されているの?
CKodomo1Dlgのコンストラクタでchk1をNULLで初期化して、
CKodomo1Dlg::OnOK() でchk1がNULLでないことを確かめてみては?
ASSERT(chk1 != NULL);
70ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(153,285ポイント)
Date: 2009/03/10(火) 11:16
No:30367
|
|
Title: Re:プログラム
|
|
まずは問題のある箇所にブレイクポイントを設定して、chk1に元の変数のアドレスがきちんと格納されているかを確認してみてください。
31ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(29,843ポイント)
Date: 2009/03/10(火) 11:54
No:30371
|
|
Title: Re:プログラム
|
|
あ・・chk1はダイアログAのヘッダに入ってます。
chk1をNULLで初期化してOnOKの
m_ed1.GetWindowText(str_ed1);
m_ed2.GetWindowText(str_ed2);
ASSERT(chk1!=NULL);
*m_pstr=str_ed1;
*m_qstr=str_ed2;
*chk1=m_chk.GetCheck();
でやるとASSERTを通ろうとすると Debug Assertion Failed!となります。
これは格納されていないのでしょうか?
2倍のポイントを手に入れた! 426ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(29,938ポイント)
Date: 2009/03/10(火) 11:58
No:30372
|
|
Title: Re:プログラム
|
|
問題のある箇所
*chk1=m_chk.GetCheck()の部分にブレークポイント置いて
chk1の中身をみると0x0000000で、これより下にいこうとすると
ハンドルされていない例外 は ●●.exeにあります とでます
95ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(7,340ポイント)
Date: 2009/03/10(火) 12:00
No:30373
|
|
Title: Re:プログラム
|
|
Debug Assertion Failed! のダイアログで「再試行」を選ぶとASSERTの記述のある行に
飛ぶことができます。
そこでローカルウィンドウでもウォッチでもいいのでchk1の値を確認してみてはどうでしょうか?
>>>dlg.chk1=&chk;
>>chkってどこに宣言されているの?
>あ・・chk1はダイアログAのヘッダに入ってます。
回答になっていません。chk1ではなくchkです。
それと、タイトルはもう少しましなものをつけましょう。
だいたいすべての質問がプログラムに関してですから。
235ポイント を手に入れた。
|
|
|
|
|
Name: バグ ..ハッカー(153,349ポイント)
Date: 2009/03/10(火) 12:01
No:30374
|
|
Title: Re:プログラム
|
|
>>chk1の中身をみると0x0000000で、これより下にいこうとすると
chk1にきちんとアドレスが格納されていないようですね。これが原因です。
51ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(29,997ポイント)
Date: 2009/03/10(火) 12:16
No:30375
|
|
Title: Re:プログラム
|
|
その方法でもchk1の中身は0x000000でした。
X chk1
○ chkでした。
記述ミスです
タイトルのことですが今回は特に特定の関数を使うものじゃないですから
つけるとしてもMFCプログラム とかでしょうか。
59ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(7,444ポイント)
Date: 2009/03/10(火) 12:27
No:30376
|
|
Title: Re:プログラム
|
|
>CKodomo1Dlg dlg;
>dlg.chk1=&chk;
っていつ表示しているの?
表示している箇所が見当たらないけど。
CDragDrop6Dlg::OnDropFiles内の
dlgのchk1に値を入れているわけなのでそれ以外で表示しようとしてもNULLになるに決まっています。
>つけるとしてもMFCプログラム とかでしょうか。
違いますね。
>*chk1=m_chk.GetCheck(); で止まってしまいます。
>"問題が発生しました。 プログラムを終了します" です。おしえてください
という趣旨が伝わるようなタイトルにします。
たとえば、
ポインタに値を代入しようとすると「問題が発生しました。」になってしまう
とか。
104ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(30,287ポイント)
Date: 2009/03/10(火) 13:02
No:30377
|
|
Title: Re:プログラム
|
|
void CDragDrop6Dlg::OnDropFiles(HDROP hDropInfo)
{
long files;
int FILEOK;
char filename[256];
CchkDialog cdlg;
cdlg.m_FILEOK=&FILEOK;
int n;
CString str_index;
files=DragQueryFile(hDropInfo, 0xFFFFFFFF,filename,256);
DragQueryFile(hDropInfo, 0, filename,256);
CString Cname=getFileName(filename);
CString kaku;
int index=-1;
CKodomo1Dlg dlg;←
i=m_listC.GetItemCount();
kaku=strchr(filename,'.');
dlg.chk1=&chk; ← これでしょうか?
まぁタイトルに関してはそれほどきにしていませんでした。今回の場合原因もわからなかったので
つけるとすれば
"問題が発生しました・・"の方ですね
290ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..ぴよぴよ(265ポイント)
Date: 2009/03/10(火) 14:20
No:30381
|
|
Title: Re:プログラム
|
|
再度
>CDragDrop6Dlg::OnDropFiles内の
>dlgのchk1に値を入れているわけなのでそれ以外で表示しようとしてもNULLになるに決まっています。
つまり、chk1を代入しているものと
CKodomo1Dlg::OnOK
で
*chk1=m_chk.GetCheck();
としているものが同じになっているのか。
つまり、同じインスタンスなのかということを聞いたつもりなのですが。
(
CDragDrop6Dlg::OnDropFiles内で
CString s;
s.Format(_T("%p"), (void*)&dlg);
AfxMessageBox(s);
ものと
CKodomo1Dlg::OnOK内で
CString s;
s.Format(_T("%p"), (void*)this);
AfxMessageBox(s);
で同じかどうかで確認できるかな?
)
こんなのは当然落ちる。
class Hoge
{
public:
int* p;
Hoge() : p(NULL) {}
void Do() { *p = 1; }
};
int Func()
{
Hoge h;
int n;
h.p = &n;
}
int main()
{
Hoge h;
Func();
h.Do();
return 0;
}
265ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(30,329ポイント)
Date: 2009/03/10(火) 14:33
No:30383
|
|
Title: Re:プログラム
|
|
Public:
CDragDrop6Dlg(CWnd* pParent=NULL);
char *getFileName(char *lpszPath);
void reg_Number();
int show(int i);
int i;
int WriteReg(int index, char *reg);
int ReadReg(int index, char *reg);
CString s_ed1;
CString s_ed2;
int chk;
int registry;
です
13ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(30,369ポイント)
Date: 2009/03/10(火) 14:39
No:30384
|
|
Title: Re:プログラム
|
|
同じじゃなかったです。
ファイルドロップの方が0012F718
OnOkのほうが0012F4C4でした
40ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..ぴよぴよ(316ポイント)
Date: 2009/03/10(火) 14:58
No:30385
|
|
Title: Re:プログラム
|
|
>同じじゃなかったです。
では、どこで表示しているのでしょうか?
そこで、chk1に代入していなければNULLのままです。
>こんなのは当然落ちる。
と同じ。
51ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(30,522ポイント)
Date: 2009/03/10(火) 16:08
No:30391
|
|
Title: Re:プログラム
|
|
>つまり、chk1を代入しているものと
CKodomo1Dlg::OnOK
で
*chk1=m_chk.GetCheck();
としているものが同じになっているのか。
つまり、同じインスタンスなのかということを聞いたつもりなのですが
うーん同じになっていないからうまくいかないんだとおもいます。
ところで 表示 って何の表示ですか? 出力のことなのか プログラムに表示されている内容なのかわかりません。
153ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(7,493ポイント)
Date: 2009/03/10(火) 16:20
No:30392
|
|
Title: Re:プログラム
|
|
ダイアログの表示(=DoModalもしくはShowWindow)なのですが。
CKodomo1Dlgを表示してOKボタンを押すってことではない?
49ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(30,538ポイント)
Date: 2009/03/10(火) 16:26
No:30395
|
|
Title: Re:プログラム
|
|
その通りだと思います。
まずCDragDrop6Dlgクラスがメインです。【追加】ボタンをおすとCKodomo1Dlgがでてきます。
16ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(7,552ポイント)
Date: 2009/03/10(火) 16:41
No:30398
|
|
Title: Re:プログラム
|
|
>【追加】ボタンをおす
関数があると思うのですが、そのなかはどうなっているんでしょうか?
>そこで、chk1に代入していなければNULLのままです。
# ということをNo:30376からずっといっているワケなんですが、、、
59ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(30,594ポイント)
Date: 2009/03/10(火) 16:54
No:30399
|
|
Title: Re:プログラム
|
|
すいません。表示って概念が少しあやふやで理解しきっていませんでした。記述 ならもう少し理解が早かったと思います。追加ボタンの所に代入はしています。
42ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(7,688ポイント)
Date: 2009/03/10(火) 16:57
No:30400
|
|
Title: Re:プログラム
|
|
>追加ボタンの所に代入はしています。
だったらなぜNULLになるんでしょうか?
>そのなかはどうなっているんでしょうか?
というか、ポインタで持つ必要があるのかなぁと。
普通に戻ってきたときに取得できるような仕組みにしておけば無難だと思うんだけど。
136ポイント を手に入れた。
|
|
|
|
|
Name: Blue ..初心者(7,773ポイント)
Date: 2009/03/10(火) 17:00
No:30401
|
|
Title: Re:プログラム
|
|
void CKodomo1Dlg::OnAddButton()
{
CKodomo1Dlg dlg;
dlg.chk1 = &chk;
if (dlg.DoModal() == IDOK) // ここでダイアログを表示
{
// OKボタンを押して戻ってきたときの処理
}
}
となっているのか否か。
85ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(30,624ポイント)
Date: 2009/03/10(火) 17:06
No:30402
| 解決!
|
Title: Re:プログラム
|
|
すいません、きちんとできました。原因はへんなとこでchk1に代入していたようです。見落としていました。
ブルーさん長い間ありがとうございました。
30ポイント を手に入れた。
|
|
|
|
|
Name: ざこ ..プログラマー(30,722ポイント)
Date: 2009/03/10(火) 17:11
No:30403
|
|
Title: Re:プログラム
|
|
なるほど、そういう意味の表示でしたか。私のは追加ボタン押したときに最初に変数の宣言をしその後に表示させていました。ですからタイミング的には正しい?と思います。
2倍のポイントを手に入れた! 98ポイント を手に入れた。
|
|
|
|
Name: あ〜る ..ぴよぴよ(188ポイント)
Date: 2009/03/06(金) 21:01
No:30158
|
|
Title: プログラミングには関係ありませんが…
|
|
初めまして、結構前からこのサイトで勉強させてもらっていた者です。
今回聞きたいのは、ゲーム製作とは関係ないのですが、コミケとかで、東方に似てる(キャラクターが出たり会話があったり)オリジナルの弾幕シューティングを出す事は大丈夫でしょうか?
というのは、つまりパクりだとか言われるもんなんでしょうか?
自分自身も自分の周りにもコミケとかの実情についてわかる人がいないので、ここの皆様ならわかるのではないかと思い聞かせてもらいました。もしわからなくても、少なくとも皆様から見て似てるゲームが売られてた場合どう思うか教えてもらえると嬉しいです。
よろしくお願いします。
188ポイント を手に入れた。
|
|
|
|
Name: 御津凪 [URL] ..熟練のプログラマー(68,732ポイント)
Date: 2009/03/06(金) 21:39
No:30161
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
似ているか似てないかと思うのは個人差があるので、確定的にはいえません。
「ここがアレと同じじゃないか。パクリだ」と言い切る人もいれば、
「何かアレににてるなー」と思うだけの人もいます。
私は少なくともどこか似ていると思っても、ただ似ているとそう思う方ですが。
(度が過ぎるとさすがに疑いますが)
いわゆる同人の世界では、似ている部分があるのはあるとしても、
気にしないのが普通です。(むしろ愉しむ方向で)
元々は自分の製作した作品を公開・販売して、購入者や他の同人の方と交流を持つ場なのですから。
(例大祭ではそんなマナーを知らない方が多そうですが)
要は自分の好きなものを作って売るのが同人です。
(同人やってる姉を持つ私からの意見です)
# 完全オリジナルでない限り、最低でも元となった作品が何なのかを記しておく必要があります。
25ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..ぴよぴよ(258ポイント)
Date: 2009/03/06(金) 22:11
No:30168
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
ありがとうございます
そうですよね、やっぱり大切なのは自分の好きな物を作るって事ですよね。
なんかこんな事質問した自分がバカみたいに思えてきました
的確なアドバイス、ありがとうございました!
70ポイント を手に入れた。
|
|
|
|
|
Name: BEMANI ..上級者(18,544ポイント)
Date: 2009/03/07(土) 04:10
No:30195
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
>>あ〜るさん
例えば、東方の演出を自分なりに考えてそっくり真似しても
自分は「良く真似できたな〜」と感心します。
ただ、オリジナルで作った!
といっても、やはり何かのゲームのここに似ていると感じる人はいらっしゃると思います。
これだけゲームが出回っていればどこか似ていても不思議でないです。
御津凪さんも仰ってますが、同じ志を持つ仲間と愉しめばよいかと思います^^
もし、無料配布などではなく、販売する際には致命的なバグを残したままにしないよう
他の方に色々プレイして頂いてゲーム全体を見直してみることをお勧めします。
お金払って固まった、起動すらできない 等ではクレーム対象になってしまうので;
同人活動やってみたいなぁ〜
190ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..ぴよぴよ(342ポイント)
Date: 2009/03/07(土) 19:45
No:30226
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
ありがとうございます。
テストプレイをしてくれる人ならいっぱい集まるんですけど、一緒に作ってくれる人はいませんねぇ…
まぁ一人でゆっくり頑張ります
あぁ何年後になるやら…
アドバイスありがとうございました
84ポイント を手に入れた。
|
|
|
|
|
Name: 桃印 ..初心者(7,554ポイント)
Date: 2009/03/07(土) 20:01
No:30227
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
はじめまして。
ネタかぶりだとかは気にする必要ないと思いますよ〜。
もうこのご時世、殆どのことはやられちゃってますから。何かと「○○は□□のパクリ」といちゃもんつける人はいると思いますが、気にする必要はありません。突き詰めてしまえば、STGなんてインベーダーゲームのパクリになっちゃうわけですし(笑
そういう部分を気にするぐらいなら、ゲーム自体の完成度を上げて「文句を言わせない面白さにしてやる!」ぐらいの勢いで製作したほうがいいかもしれません。やっぱりオリジナリティそのものより、面白さの方が大事だと思いますよ〜。
余談ですが、私なんかは「面白いゲームをやる」→「こんなゲームが作りたい!」で実際に作っちゃうパターンなので、いつまでたってもオリジナルゲームが作れなかったり。でも、それはそれで楽しいものです。
277ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..ぴよぴよ(502ポイント)
Date: 2009/03/08(日) 11:53
No:30265
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
アドバイスありがとうございます
じゃあ逆に東方に似てるって言われたら褒め言葉として受け取るようにします(^-^)
気にせず面白いゲームを目指して頑張ります
>いつまでたってもオリジナルゲームが作れない
その気持ちすごくわかる気がします
僕もほんとは最初東方の二次創作してからオリジナルのゲーム作ろうと思ったんですけど大学受験までの時間を考えるとちょっときつかったんです…
160ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,006,979ポイント)
Date: 2009/03/08(日) 20:19
No:30285
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
やめといた方がいいんじゃ無いかと思います。
過去の悲惨な例・・・、詳しくはメールを送ってくだされば回答します。
東方関係が好きな人ってすごく色んな人がいます。
少しでも設定が違ったり、気に入らない要素があると鬼の首取ったみたいに責める人がいます。
そうでなくても・・。
私も詳しいわけではないので、偉そうな事はいえませんが、
東方のことを完全に理解し、応用する場合もどのように応用すれば受けられるかよくよく考えた上で制作出来るというわけではないのなら
東方のキャラを使ったシューティングという類は安易に手を出さない方がいい気がします。
例えば東方の事をよく知らないのに二次創作なんかしたら救えないほどトラブルになる気がします・・。
(特定の人物が行う行為について言っているだけであって、私自身東方は好きですし、誤解の無いようお願いします)
後、これとは別ですが、
>>パクリだと言われるのでしょうか
について一般的なコメントをします。
批判はどんなものにも付き物ですし、
意見、批判や、もっいっても中傷に属するコメントでも非常に重要なものです。
企業なんかは苦情データというものはお金を出しても買っています。
「褒め言葉」からはほとんど吸収出来る事はありません。批判や苦情にこそ自分が成長出来る要素が含まれています。
この件での回答はなかなか難しいですが、(東方キャラを使わないという条件で)
批判を受けたくない、オリジナルとして認められたい、という場合なら完全に独自の方法で独自の路線で作った方がいいでしょう。
そうではなく、お手軽に制作を楽しみたいとか、批判があってもいいから一回作ってみたいとか、経験して改善すればいいと思っている場合は元々あるものを利用する、何かを真似るというのもありだと思います。
しかし「販売」となると金銭的なトラブルが付きますので、素材利用などの利害関係などは充分注意して下さい。
742ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..ぴよぴよ(709ポイント)
Date: 2009/03/09(月) 01:04
No:30292
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
アドバイスありがとうございます。
やっぱり東方の二次創作で弾幕シューティングを作るのはやめた方がいいんですね…
でも僕は東方をやって弾幕シューティングに惚れて、弾幕シューティングでゲームを作りたくなってプログラミングを勉強し始めましたし、もうストーリーの方は出来上がって、形にするのが今凄く楽しみなんです。
だから一回作るだけ作ってみようと思います
アドバイス本当にありがとうございました。そしてきっと作っていく上でこのサイトのお世話に何度もなると思いますので、これからもよろしくお願いします
207ポイント を手に入れた。
|
|
|
|
|
Name: 桃印 ..初心者(7,799ポイント)
Date: 2009/03/09(月) 09:11
No:30302
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
すいません、どうしても突っ込みたくなったんで書き込まさせていただきます。
確かに今の東方界隈は色々な事情でピリピリしている感はあります。普通に公開するよりも、厳しい意見が多く出てくることあるでしょう。ただそれは規模の問題で、結局は「面白いか」「面白くないか」に集約されてしまうと思います。そこに東方であるかそうでないか、なとは一切関係ありません。
一部の心無い発言もあるかもしれませんが、そんなんはたいていにわかの戯言なので鼻で笑っておけばいいと思います(批判を批判しているのではなく、あくまで「本質を理解しようとしない程度の低い批判」のことです)。
あと、東方の事をよく知らないのに二次創作なんかしたら批判されるのは当たり前だと思います(笑
というか東方じゃなくても批判されることでしょう。二次創作はファンが行うものですから。ファンでもないのに名前を借りるというのは「とりあえず東方ってつけときゃホイホイできるだろ」って言ってるようなものですから。幸いあ〜るさんはきちんと東方をプレイされてるようで、よほどのことがない限り問題ないと思います。
まーここら辺は同人活動をやっていてるから言えることなのかもしれませんが。外から見るだけでは相当混沌とした魔窟に見えることでしょう(笑
ここまで書いたことから分かる通り、私も東方の熱心なファンの一人なので、あ〜るさんの作品を心待ちにしています。でわ。
245ポイント を手に入れた。
|
|
|
|
|
Name: 一見 ..ぴよぴよ(362ポイント)
Date: 2009/03/09(月) 12:00
No:30319
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
>そんなんはたいていにわかの戯言なので鼻で笑っておけばいいと思います
それはどうかね。
HP閉鎖にまで追い込まれたり、HP攻撃されたり、笑ってられないような状態になるほど追い詰められた事例はありますよ。
気持ち悪いほど粘着する厨もいますし、「そういう輩はほっとけ」ですまない状況になることもあります。
東方関連はそれが特に多いと。
それが「過去の悲惨な例」とかじゃないのかな。
>そこに東方であるかそうでないか、なとは一切関係ありません。
というのも違うかと。
東方がこれだけ人気でて、しかも偏った知識や偏った見方の人間も増えているなかで、
東方の二次創作が特定の人物によって批判される可能性は他の二次創作よりはるかに高いかと。
東方厨って言葉がある位だからね。
っと、これ以上東方の話題をここで出すのもあれなんで、一言コメントとさせてもらいます。
362ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..ぴよぴよ(886ポイント)
Date: 2009/03/09(月) 22:06
No:30352
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
みなさんアドバイスありがとうございます。
なんとなく、みなさん考え方の違いはあれど、東方の二次創作をコミケとかに出品するのが危険そうなのはわかりました。
作るにしても個人で楽しむ程度にしときます。
それとは別に、(オリジナルストーリーの)弾幕シューティング自体を作って出品するのは大丈夫でしょうか?
要するに東方以外の弾幕シューティングをコミケに出品するのは何か暗黙の了解みたいな感じでタブーになってるみたいな事はないでしょうか?
177ポイント を手に入れた。
|
|
|
|
|
Name: Dixq (管理人) ..ウィザード(1,008,381ポイント)
Date: 2009/03/09(月) 22:20
No:30357
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
誤解をさせたり、二次創作への懸念を増大させてしまったりしたらすみません。
ZUNさんも「重要なのはオリジナルを尊重する事」と仰っていますし、
しっかりと原作を理解し、尊重し、敬う姿勢を持って制作すれば問題はおきにくいかとは思います。
私は販売の経験はありませんので、実際の詳しい事は他の方に回答を受けていただければと思います。
オリジナルのSTGを出すだけなら全く問題ないと思いますよ。
後、ここのコードを引用される場合も、コピーでなければ使っていただいて構いませんし。
ただもし商品化するなら、全て配列として用意している部分をベクターにするとか、リストにするとか、
他にも色々と効率化を図ったほうがいいかもしれません。
176ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..かけだし(1,222ポイント)
Date: 2009/03/09(月) 22:33
No:30359
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
ありがとうございます。
オリジナルなら問題ないですよね、やっぱり
度々アドバイスありがとうございます。ほんと迷惑かけます…
ここのコードはありがたく使わせてもらってます。
勉強しつつ関数名とか自分にわかりやすいようにいじらせたりもさせてもらってます(^^)
というか僕が使ってるのがVisualC++じゃなくて BorlandC++だから微妙に違くて大変なんですよね(-.-;)
しかも↑に書いたように勝手に関数とか変数の名前変えてどれがどれかわからなくなったりするという…(←H
2倍のポイントを手に入れた! 336ポイント を手に入れた。
|
|
|
|
|
Name: 夢の旅人 ..ぴよぴよ(588ポイント)
Date: 2009/03/10(火) 16:25
No:30394
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
周囲から東方厨といわれている、元とある高校の新聞部のモノです。w
大分結論が出ているようのなので、個人的な感想だけなのですが・・・
1.何をしたところで、マナーを知らない(熱狂的な)人のクレームは(程度の差こそあれ)ある。
2.あとは気の持ちよう(作者の姿勢等々)
確かに、1ジャンルとして「東方」というのができあがって、いろいろとおかしな雰囲気とか流れみたいなモノはありますが、大概の作品は受け入れられると思います。
あとはどれだけ作品に情熱とかを詰めこめられるかですよ。
廊下や教室に捨てられていたり、「だからどうしたんだよ…」とか言われて、その度に挫けては前に進めないのです!!w
むしろ、アドバイスだと思って次の作品を良くしましょう!!!!
あ、原作があるならそれに対するリスペクトとか、そういった作者の姿勢が見れるほうがいいと思います。
要するに、作品の体験版があるならまってますw
趣味に留めるにしても、実行するにしても、頑張ってください!
129ポイント を手に入れた。
|
|
|
|
|
Name: あ〜る ..かけだし(1,326ポイント)
Date: 2009/03/10(火) 16:39
No:30397
|
|
Title: Re:プログラミングには関係ありませんが…
|
|
ありがとうございます。
やっぱり何かしらの批判があるのは不可抗力だと思って割り切る事にしました。
で、今考えてるのは批判を緩和する方法。
何かオリジナルティがあれば批判も減るんじゃないかと(スペルカードシステムに変わるシステムは思い付きそうにないですが…(^^;))
何はともあれ頑張ってみます!体験版が出来るのはいつになるかわかりませんが…(笑)
アドバイスありがとうございました
104ポイント を手に入れた。
|
|
|
|
|