C#は電気羊の夢を見るか?(引っ越し中)

dtiブログが閉鎖とのことでhttp://tanocs.blog.fc2.com/へ引っ越します。

XNAで速度を損なわず、ボタンとか、ピクチャーボックス、子フォームを使用する

なんというか、このやり方が正しいかどうかは謎だが、
ぷぃぷぃさんトコのやり方だとどうしても速度が出なかったので、ぷぃぷぃさんの奴を参考に改良。


Form.FromHandle(this.Window.Handle)
とかやってやれば、フォーム情報が取れる模様。

とどまるところ、フォームとして情報が扱えれば良いので、
これにコントロールを追加していけば実現できる。

なので、あとは普通のWindowsフォームと同じ様に

using System.Drawing;
using System.Windows.Forms;
を追加して、プロパティに

private System.Windows.Forms.Button button1;
んで、コンストラクタに

this.button1 = new Button();
this.button1.BackColor = System.Drawing.SystemColors.ButtonFace;
this.button1.Location = new System.Drawing.Point(300, 12);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(87, 30);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = false;
this.button1.Click += new System.EventHandler(this.button1_Click);

Form.FromHandle(this.Window.Handle).Controls.Add(this.button1);

必要に応じて、イベントを追加してくりゃれ。

private void button1_Click(object sender, EventArgs e) {
  //なんか処理
}

はい、これで出来上がり。


フォームの場合は
まずソリューションエクスプローラでプロジェクト名右クリック>追加>新しい項目>WindowsForm
でフォームを追加したら、コンストラクタで

Form1 f = new Form1();
f.TopLevel = false;
Form.FromHandle(this.Window.Handle).Controls.Add(f);
f.Location = new System.Drawing.Point(200, 200);
f.Show();

とすればOK。
フォームでイベント処理を行うときは親フォームをthis.Ownerで取れるので、こいつで値の受け渡しを行うことができる。

ね、簡単でしょ?


残念ながら、TransparencyKeyでさくっと透過処理できる
と言う訳には行かなかったので、何らかの工夫が必要っぽい。

ちなみに、これらの方法はColorやRect、Pointの宣言がかぶるため、
その辺の修正がかなり面倒・・・
この辺り、自動的にやる方法はないんじゃろうか・・・


とりあえず、ぷぃぷぃさんのやり方で60fps->10fpsだったのが
この方法で59fpsになり、1fps程度落ち込みで済むようになった。

ただ、レイアウトをビジュアル的にできるという点、
一々オブジェクトを作成する手間がない点で、
ぷぃぷぃさんの手法の方が簡単だと思う。


<後日追記>
非常に大きな問題を発見。
テキストボックス等のキー入力が使えない。

.textプロパティで値の入力はできるのに、
どーゆーワケか、わざわざメッセージを下位オブジェに送信しないようになってるっぽい。

内部をなんとなく想像はできるけど、下手なオーバーライドは避けたい。
出来る限りシンプルな方法で解決したいが・・はてさて。
このエントリーをはてなブックマークに追加
LINEで送る

こんな事が許されて良いのか

パブリックで公開されているクラスのプロパティに、
インスタンス時に、そのまま値をぶち込むという、
コンストラクタの存在をブチ壊しにする代入方法があるっぽい。

public class testClass{
  public int intA;
  public int intB;
}

void main(){
  testClass a = new testClass(){
    intA = 0,
    intB = 0
  };
}

これ、どうなんじゃろうか・・・
便利なような、危険なような、微妙。

確かに明示的にそのクラスの値をセットしているのが
ソース上でわかりやすい気もするが・・・やっぱり微妙。
このエントリーをはてなブックマークに追加
LINEで送る

Collada出力時の注意




いくつかモデルの読み込みを試していると、
どうにも表示されないモデルが有った。

んで原因を調べてみると、
どうやらこの[VertexColor]なる子が悪さをしていた模様。

どういった時にどの条件で付加されるかは不明だが、
意図して使用しているものではないので、削除。

するとモデルが正常に表示された。

蛇足:
マテリアル情報は、テクスチャを適用しないと出力されていなかった・・なぜ?
このエントリーをはてなブックマークに追加
LINEで送る

ぬらぶる

あんまりnullって使わない。
だいたいフラグで処理してる。
なんなら0でも良いと思う。
でもnullが気になる。

そんな日々に別れを告げるおまじない
if(int.HasValue)

ちょっとかっこええ表記だと思う
このエントリーをはてなブックマークに追加
LINEで送る

collada出力時の注意点

BlenderでColladaの出力をして、
読み込む際「material」が無くて時々落ちるので、
なんだろうと思ってみたら、そのまんま、マテリアルがなかった。

このあたりを見ると設定方法がわかる。
http://wbs.nsf.tc/tutorial/tute_beginner20.html

Colladaをエクスポートする際は”全てのオブジェクトに”マテリアルが設定されている必要が有る。
このエントリーをはてなブックマークに追加
LINEで送る

とってもメモ

なんということもないのだが、XNAで不便だなぁと思うのは、
マウスが後に隠れたようになってしまうこと。

見えるようにする方法はないのかと探したけど、
前はなんだかんだで見つからなかった。

んで別のことを探しているときに見つけたので、メモ

this.IsMouseVisible = true;

と一行やってやるだけ。
わかってしまえば簡単な話さぁね。
このエントリーをはてなブックマークに追加
LINEで送る

IMEのよさ

一時期、といっても高校生時代だから、かれこれ10年ほど前、
ATOKをこよなく愛し、IMEのゴミっぷりに嫌気がさしていた、
あの頃をふと思い出す出来事がある。

それはGoogleがIMEにけんかを売り始めたんだそうな
http://www.google.com/intl/ja/ime/

携帯電話のように素早く出てくる候補、
WebDBを利用した流行に敏感な単語ライブラリは何よりも魅力を感じる。


私がATOKをあきらめた理由に、
「どのパソコンにでも入っている物ではない」
という一番大きな理由に悩まされた経緯が有る。

入力結果がATOKとMS-IMEでは大きく異なる為、
専門学校にあったPCでの入力作業に苦労する
という問題を抱える事になった為、当時の私は泣く泣くATOKを手放した。


時と環境が変わり、職場なら有る程度のツールのインストールは許容されるが、果たしてこれはどうなんだろうか。。。
とりあえず、最近専ら人柱専用機と化している職場のパソコンに入れてみるかな。


追記:
「カタカナ語英語辞書」や「郵便番号変換ができない」とお嘆きのあなたに、Ctrl+ShiftでIMEと瞬時に交換できますよ。

これでIMEでうまく変換できなたのになぁ、という場合もとりあえず対処可能。

評価は今のところは「普通」といった感じ。
このエントリーをはてなブックマークに追加
LINEで送る

デリゲート

自分はC#を使っているつもりなのだが、
どうもそうじゃないんじゃないか?と思うことが多々有る。

クラスの理解が中途半端で、
ユーザーコントロールは作った事が無い・・

そして、その際たる物にデリゲートがわかっていないと言うのが有る。
いつつかうのアレ。どう使うのアレ。

んで、なんとなく、こういうのがそうなんじゃないかなぁという記事を見つけたので置いておく。

http://d.hatena.ne.jp/yaneurao/20070207


ところで、この「やねうらお」ってBM98の人なんだろうか・・
ああ、年がばれそう・・


=追記=
やねうらおさんはやねうらおさんでした。

ちなみに、この辺も併せて読みたい
http://www.atmarkit.co.jp/fdotnet/csharp20/csharp20_03/csharp20_03_01.html


イテレータっておいしい?
http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF
このエントリーをはてなブックマークに追加
LINEで送る

 | HOME | 

PAGE TOP ▲

Appendix

■春条

■春条

生息地は愛知
車と甘い物が好きな31歳
特技は無限昼寝

MONOからSharpDXを使う
変態的な手法で、
.NET Frameworkを使わずに
ゲーム作りやってます。

Search

Calender

« | 2009-12 | »
S M T W T F S
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

Twitter

Recent Entries

DTIブログポータルへ
このブログを通報
Report Abuse

利用規約