1 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 21:35:10 ] (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。 前スレ C#, C♯, C#相談室 Part55 (実質56) pc12.2ch.net/test/read.cgi/tech/1260111240/ Visual C# 2008 Express Edition 日本語版 www.microsoft.com/japan/msdn/vstudio/express/vcsharp/ その他テンプレ>>1-5 くらい
492 名前:480 mailto:sage [2010/04/25(日) 20:51:49 ] メイリオをあきらめてフォントをMS ゴシックにしたら、 「ファイル(F)」が「ブアゥレ(F)」に文字化けしたwww だれか、Aero Glassのメニューに綺麗に文字が描ける方法を知りませんか?
493 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 20:54:03 ] >>490 タイマを使うとテキストボックスの文字を点滅できました forを使うとなぜ10秒間、「実験」の文字すらでてこなくなるのか 教えていただけるとありがたいのですが。 テキストボックス以外が固まるのはそうだろうなと思うのですが。
494 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 20:56:13 ] >>492 VisualStyleRenderer.DrawText使えば?
495 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 20:57:10 ] >>493 > forを使うとなぜ10秒間、「実験」の文字すらでてこなくなるのか 描画するのも同じスレッド ところがそのスレッドがループで詰まってるから描画もできない
496 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:08:49 ] >>495 さん ほえー ありがとう。今日ずっと悩んでいたんです。 .AppendTextなら文字がでてくるのに なんで.textでは出てこないのかなーと。 本当にありがとう。
497 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:12:32 ] for (int i = 0; i < 10; i++) { textBox1.Text = "実験"; textBox1.Refresh(); Thread.Sleep(200); textBox1.Text = ""; textBox1.Refresh(); Thread.Sleep(200); } としたらちゃんと点滅できました。ありがとう。
498 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:14:29 ] >>497 お前は何もわかっていない Thread.Sleepはマルチスレッドなど非同期で動かしたりする場合に使う シングルスレッド、ましてやFormクラスで使うべきじゃない
499 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:21:45 ] >>498 さん そのとおりです 今、マルチスレッドをやっているところなんです。 通信を別スレッドで受けている間 文字を点滅させられないかなと悩んでました。 怒らないで。
500 名前:480 mailto:sage [2010/04/25(日) 21:23:45 ] >>494 ありがとうございます。 やってみましたが、やっぱり文字が透明になりました。
501 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:24:58 ] で、通信データは別スレッドからテキストに固まらずに表示されるのに なぜ、点滅みたいな簡単なことで固まるのかわからなかったので。
502 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:28:35 ] >>501 それはマルチスレッドじゃなくて ただのスレッド処理だから もう一方が処理している間、他のスレッドは割り込めない 割り込みたいならlockキーワードを使うべし
503 名前:490 mailto:sage [2010/04/25(日) 21:32:36 ] 「メッセージループ」でぐぐるといいよ。
504 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:53:10 ] >>492 ブアゥレ 噴いたww
505 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 22:10:01 ] >>502-503 さん ありがとう。しばらく悩んでみます。
506 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 22:33:15 ] そう言えばスレの流れとあんま関係ないんだけどさ BitmapとかGraphicsとか、巷のサンプルだと必ずDisposeしてるじゃん? GC来るまで残りっぱなのは理解してるけど、マネージリソースなんだから そんな明示的にせんでもいいような気がするんだけど なんか理由あるん?
507 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 22:51:33 ] GraphicsもBitmapもどっちもアンマネージリソース抱えてるよ Bitmapなんか実体はほとんどアンマネージメモリに置かれてるわけだし
508 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 02:28:31 ] >>507 ソースある?
509 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 05:25:18 ] >>480 少なくともVistaまでのAPIで透明の上にClearTypeで描画することはできない。 これはClearTypeの技術上仕方がない。 だからIEとかグラスの上に乗せるテキストはClearTypeじゃなくてただのアンチエイリアシングになっている。 直接の解決策ではないが.NET 4.0のWPFでは自己責任で透明の上にClearTypeで描画できるようになった。 Direct2Dは調べてないので知らないができるかもしれない。
510 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 05:54:41 ] >>508 ReflectorでSystem.Drawing.dllを逆アセンブルしてみると分かるが、 これはGDI+のラッパーだから。
511 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 06:07:00 ] ハンドル持ってる時点で分かると思うんだがなぁ
512 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 06:18:24 ] IDisposableが継承してるならDisposeしろ。 GCで解決するならIDisposable継承しない、するな。
513 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 08:53:14 ] IDisposableってのは、「Disposeしろ!」っていう開発者からのメッセージだから。
514 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 11:18:15 ] アクションゲームなのだとスターを取ると無敵とかありますよね 他にもフラワーをとったら火が出たりするのとかメタル化したりとか こういうのをやるときにそのキャラクターのクラスにフラグを持たせる方法もあると思いますが そうしないで外からそのキャラクターのインスタンスに機能を拡張するのはどうすればいいでしょうか まあ、上の例位だと、あたり判定の部分にデリゲードを使って その部分を差し替えるとかでもいいかもしれませんが はじめからyを押された時の処理を描くつもりがなくてそういう関数を用意していない時とかに フラワーとったらどうしたらいいでしょうか。
515 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 11:19:40 ] >>514 IronPython
516 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 11:29:06 ] >>515 ありがとうございます 今ちょっとぐぐってみました .Netから使えるスプリクト言語みたいなものですか? ちょっと調べてやってみます.
517 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 11:30:53 ] オブジェクト指向を勉強したら>>514 みたいに考えたくなるのはよくわかるけど 特にゲームは実際やってみるとやっぱり上から神様が管理しないと難しいよ
518 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 11:34:04 ] >>517 そうですね痛感してますw でも趣味の勉強なのでいろいろ試してみたいと思います。
519 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 12:10:47 ] ゲームはソース読んで勉強するのが一番わかり易いと思う
520 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 14:05:19 ] DataTableに自作のクラスを入れることができますか? 入れようとするとToStringの中身が入ってしまうようですが。
521 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 14:14:59 ] できますん
522 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 14:40:23 ] >>514 継承できなければ委譲。拡張メソッドで行ける場合もある。
523 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 14:58:42 ] >>514 has-aでいいんじゃない? Marioをコンストラクタで受け取る FlowerMarioクラスを作ってやればいいと思う と、どう考えても回答者側の知識量ではない俺がいってみる。
524 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 14:59:52 ] >>520 できるよ 単に表示されるときにToStringが呼ばれてるだけでしょ
525 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 15:04:26 ] >>523 それは無意味 MarioとFlowerMarioの間に継承関係が無いなら アプリケーションがFlowerMarioをあらかじめ知っていないといけない
526 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 15:07:05 ] >>525 ああそうだね、じゃあ両方にインターフェースをつけるとか
527 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 15:07:30 ] >>512 Disposeできない時のためにFinalizeがあるんじゃないの
528 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 15:09:56 ] >>514 ステートマシンを内部に持てばいいんじゃないの、と適当言ってみる それをオブザーバーパターンで外から操作とか
529 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 15:13:24 ] Decoratorとか? まあゲームだったら結局仕様をきっちり決めて決め打ちが一番いいと思うけど
530 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 15:21:44 ] ゲームの場合、一度納品してから仕様変更なんて、基本的にはないだろうしな。
531 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 15:26:41 ] ゲームのキャラクターなんか激しく周りの環境に依存するんだから プラグイン的な拡張をやろうとすると結局グローバル環境的なものを丸ごと渡すことになって あんまり意味が無さそう
532 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 15:38:43 ] ありがとうございます >>519-531 Decoratorパターンていうんですね>>526 さんの 方法は一応考えたんですが、羽と花をとったときに 両方の効果を使える用にしたいなと思いまして。 >>528 調べてみます 拡張性に意味はないかもしれませんが勉強なので。
533 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 16:04:32 ] >>521 ,524 ありがとう 次のようなコードで試したんですが、使い方間違ってますか? foreach( DataRow row in table.Rows ) { row["col1"] = new MyClass(); MyClass obj = row["col1"] as MyClass; //失敗する }
534 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 16:16:39 ] それ、col1列のDataColumnのDataTypeがStringになってる
535 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 16:19:26 ] >>523 重要なことだからつっこませてもらうと、MarioがFireFlowerを取るとFireMarioになるんです。 Luigiクラスはいりません。バグの元ですから。
536 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 16:21:04 ] >>530 最近はオンラインアップデートがあるからなんとも言えなくなってきたかも。 追加要素という名のアンロックは別としても、修正パッチあたるよ。
537 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 16:29:22 ] てか、MODだろ
538 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 16:50:34 ] >>534 おぉ、できました。 ありがとう
539 名前:536 mailto:sage [2010/04/26(月) 17:00:05 ] ああ、家庭用ゲームだと思い込んでレスした
540 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:32:54 ] >>523 has-aならStateをキャラクターとアイテムが持ったらいいんじゃね? FireStateを持ったFireFlowerをMarioがとるとMarioがFireStateを持つようにする
541 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 20:14:52 ] 正直、マリオ程度のゲームなら 愚直にステート値でswitchするコードを書くほうが結局分かりやすいと思う。 こういうの、最近はすっかり「不吉な臭い」扱いになっちゃてるけどw デリゲートやインターフェイス使ってストラテージパターンみたいなことしても、 自己満足以上の効果はないと思う。
542 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 21:59:06 ] 風マリオと雷マリオと闇マリオと土マリオとマリエと・・・ stateの量の問題?
543 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 22:01:16 ] 実際のゲーム機の開発でそこまで綺麗にクラス使ってるのかね?
544 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 23:01:59 ] ゲーム機のゲームも結構な規模になってるだろし それなりに綺麗な設計せざるを得なくなってるんじゃないかね?
545 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 23:18:51 ] 家庭用ゲームのソースコードなんて見る機会無いからね。 このスレに業界人は居るのかなぁ。
546 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 01:35:19 ] テートスとかジーラテはスーコーあげあげだからねー ウィチスーでスーケーしてるほうが現実見てるってyou know?
547 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 01:45:26 ] 日本語でおk
548 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 02:25:00 ] StateまたはStrategypatternは時間がかかります。 switch caseを使用するのは現実的です。理解?
549 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 02:54:50 ] 把握した
550 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 06:59:08 ] スーコーあげあげいいなw スーコーマシマシ!
551 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:27:43 ] object同士でプリミティブ型であれば ある程度大小比較してくれる関数ってありますか? 具体的に言うとstringとint(byteなど)で比較を 正しく行いたいのですが。
552 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:39:01 ] "a"と100のどっちが大きいかなんか定義次第なんだから正しい比較も何もないだろ
553 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:41:11 ] どうやって"one"と5を比較できると思うんだ? 数値に変換できる文字列なら、数値に変換して比較するしかなかろう。
554 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 21:49:10 ] int.Parse
555 名前:551 mailto:sage [2010/04/27(火) 21:56:06 ] 書き忘れました。 型が同じことが前提です。 >>552-554 ありがとう やはりParseが一般的ですか。 DataViewもParseで比較してるのかな。
556 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 22:04:26 ] 型が同じって、Objectに入ってるInt32同士を比較したいってことなのか? ならComparerクラスとか
557 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 22:13:55 ] もう、自分がやろうとしていることを意味的に把握してないから人にうまく説明できないわけで、 その時点でちょっと.....
558 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 22:15:50 ] 関係ないけどstringやobjectは組み込み型だけどプリミティブ型ではないよ
559 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 22:55:53 ] >>502 なぬ? >>512 残念ながら一貫してそうはなってない。
560 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 23:55:42 ] まあ確かにWin9xでなきゃ目くじら立ててDisposeする必要がないものでもIDisposable 実装してたりするし 関係ないけどインターフェイスを「継承」する、って言い回しはJava方面の方言? それとも単にありがちな誤用ってだけなのか。
561 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:03:00 ] ありがちな誤用
562 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:03:04 ] >>560 C#方言。 インターフェイスの概要 インターフェイスには、次の特徴があります。 インターフェイスは抽象基本クラスに似ています。インターフェイスを継承する非抽象型は、すべてのインターフェイス メンバを実装する必要があります。 インターフェイスは直接インスタンス化できません。 インターフェイスには、イベント、インデクサ、メソッド、およびプロパティを含めることができます。 インターフェイスには、メソッドの実装が含まれません。 クラスと構造体は、複数のインターフェイスを継承できます。 インターフェイス自体が複数のインターフェイスを継承できます。
563 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:06:37 ] >>555 型が同じなら、IComparableにキャストしてCompareToするとか。 codepad.org/m37TS28P
564 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:09:13 ] かと思ったら、Javaでも使ってるな。 interface inheritance 言語規定より。 This (multiple) interface inheritance allows objects to support (multiple) common behaviors without sharing any implementation. この(多重)インタフェース継承は,オブジェクトがいかなる実装も共有せずに(多重の)共通的な振る舞いをサポートすることを可能とする。
565 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:14:38 ] インターフェースはインターフェースを継承できる
566 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:15:28 ] >>565 なるほど、それが「実装」だったら確かにおかしいな。
567 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 00:38:38 ] Javaだと、implements と extends とキーワード異なるけれども、C#だと、どっちもコロンだから用語を忘れてしまうんだな。
568 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 02:12:26 ] クラスがインターフェースを継承している時点で実装があるはずなんだから、継承だけ使えば意味通じるでしょ
569 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 02:19:02 ] >>565
570 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 07:58:33 ] >具体的に言うとstringとint(byteなど)で比較を >正しく行いたいのですが。 >型が同じことが前提です。 どっちだよw
571 名前:デフォルトの名無しさん [2010/04/28(水) 08:01:22 ] >>551 遅レスだけどこんなのダメだっけ if (obj1 is IComparable) { return (obj1 as IComparable).CompareTo(obj2); }
572 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 11:06:44 ] インターフェースて使った事ないんだけど どういうときに使うの?
573 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 11:40:01 ] >>572 継承関係にない型の間に共通の機能を持たせて、同じように扱いたいとき。 >>563 ,571がまさにそれ。 C#の言語仕様(foreachだのusingだの)とも密接に結びついているので、 知らず知らずのうちにインターフェースを活用しているはず。 たとえば、IEnumerableを実装しさえすれば、どんな型でもforeachで列挙できる。
574 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 11:53:40 ] >>563 >>571 これって文字の比較であって、数値の比較じゃないでしょ?
575 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 11:55:54 ] >>574 何を言ってるんだ
576 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:02:44 ] >>574 冷静になるんだ
577 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:34:27 ] あるクラスを継承してメンバ関数だけオーバーライドして使いたい場合 元のクラスで扱っても大丈夫でしたっけ?
578 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:36:13 ] >元のクラスで扱っても大丈夫でしたっけ? インスタンスを作った後も元のクラスで扱っても大丈夫でしたっけ?
579 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:38:51 ] 元のクラスで扱うってのはどういうことなんだ? 継承元のクラスにキャストするとかそういうこと?
580 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:41:53 ] >>579 ゲームの中にでてくる物体(障害物、自機、敵など)はすべて座標系など特定の 情報を持つという部分では共通ですが、動きだけが違うので管理上は継承前の クラスで管理して、動きに関連するメンバ関数だけを差し替えを実現したい・・ という感じです
581 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:46:35 ] オーバーライドしなくてもいいんじゃないか? 継承先で個別に実装すれば 100%書き換えることが前提になってる感じだからむしろIFとかにしてみるとか・・・ いや・・・いろいろ方法はあると思うが 継承元で関数書いてもどうせ空の実装とかにしかならんだろうし オーバーライドしなけりゃ元の動作のまんまになってしまうのはバグの元だと思うんだ・・・
582 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:47:23 ] >>580 普通にできるが
583 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:49:39 ] >>581 むかーしgcc上で書いた物を移植中なので.netなりの方法はないかなあと模索してたりします。 C時代は関数ポインタのテーブルを用意して・・・とかやってたんですけどね >>582 どんな感じでやればいいですかね?
584 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:54:08 ] >>583 いやだから基本クラスで動き意外の関数作って 継承したクラスで新しく動きの関数作ればいいだけだけど 何が問題なの?
585 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:58:17 ] class 物体 { public void 動き以外の処理(){} } class 自機:物体 { public void 動きの処理(){} }
586 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:58:27 ] >>584 Hogeクラスを継承したHogeA,HogeB・・・・・HogeZとかあったとして 管理はList<Hoge>として全体をまとめたいんです・・
587 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 12:58:42 ] 抽象クラス使えば?
588 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 13:03:24 ] >>586 >>573
589 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 13:13:10 ] 関数ポインタ使っていたなら、そのまま構造体を抽象クラスにして、関数ポインタを仮想関数にしたら、完成のように思うが。
590 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 14:47:22 ] >>577 やってみたらいいのに何でわざわざ面倒な手順を踏んでるんだ?
591 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 15:27:18 ] まあvirtualでググればいいんじゃないかな!かな! >>577
592 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 18:20:03 ] 模索している割には他の提案を聞き入れようとしない件について もし判ってないならそれは技術力不足以外の何物でもないな