トップ回答者
VB特有の現象

質問
-
どうもYORIGONです。
DirectX.Direct3D.Font.DrawTextメソッドについてですが
他の言語(C#.NET, C++.NETなど)では普通にオーバーロードされていて使うことが出来るのですが、なぜかVS.NET2005 Academicでプログラミングをしていたところ『エラー 1 class 'Microsoft.DirectX.Direct3D.Font' に同じ名前のメンバが多種類存在するため、'DrawText' があいまいです。 D:\プログラム総合\VSプログラム\DirectXテストプログラムVol4\Form1.vb
』と怒られてしまって緊急対処をしているところです。
このようなエラーのヘルプを参照したところ『このエラーの最も可能性の高い原因は、大文字と小文字の区別です。~・・・』
以降は次のURLでご確認お願いします。
http://msdn2.microsoft.com/ja-jp/library/ms235408(d=ide).aspx
対処法が二つほど載っていたので見てみたところ元の定義されているプログラムが変更できることが可能であれば変更の検討をしてくださいとあります。
しかし、DirectXではこのようなことは出来ないのではないかと思います。もうひとつは、その問題のコードを削除するとあるのですが、これはDirectXプログラミングテストしているので、削除したら意味がありません、ということは
VB.NET2005 Academicで、DirectX.Direct3D.Font.DrawTextメソッドの利用は不可能になるのでしょうか?
このような事はどうすればよいのでしょうか?自分の今の対処方としては別の言語(C#.NET or C++.NET)で例のメソッドを使うように再定義しクラスライブラリ化してそれをVBで呼び出している現状です。
他にVBで使えるような対処はないのでしょうか?
回答
すべての返信
-
返信送れて大変申しわけございません
またソースコードの提示忘れもすみませんでした。例の問題のソースコードです。
=======グローバル変数
Dim dev As Device ’Direct3DのDeviceクラス
Dim bmp As Bitmap ’画像読み込みよう
Dim spr As Sprite ’スプライト変数
Dim Tex As Texture ’テクスチャー変数
Dim p As New Point(320, 240)
Dim s As Integer = 0
Dim Fon As Microsoft.DirectX.Direct3D.Font ’Direct3Dフォントクラス
=======Drawsという描画メソッドを定義
Private Sub Draws(ByVal v As Integer)
dev.Clear(ClearFlags.Target, Color.Black, 0, 0)
dev.BeginScene()
spr.Begin(SpriteFlags.AlphaBlend)spr.Draw2D(Tex, New Point(0, 0), Geometry.DegreeToRadian(v), New Point(-50, -50), Color.White)
Fon.DrawText(spr, "test", 0, 0, System.Drawing.Color.White)spr.End()
dev.EndScene()dev.Present()
End Sub======コンストラクタを定義
Public Sub New()
InitializeComponent()Me.ClientSize = New Size(640, 480) ’クライアントサイズを640*480に
Dim pp As New PresentParameters ’デバイスのパラメータを定義する変数
pp.Windowed = True ’ウィンドウモードにする
pp.SwapEffect = SwapEffect.Discard ’スワップエフェクトはデバイスカードにお任せする
’デバイスのインスタンスを生成(すべてハードウェア処理にする)
dev = New Device(0, DeviceType.Hardware, Me, CreateFlags.HardwareVertexProcessing, pp)
’スプライトのインスタンスを生成
spr = New Sprite(dev)
’画像を読み込みテクスチャーにセット
bmp = New Bitmap("line.bmp")
Tex = Texture.FromBitmap(dev, bmp, Usage.None, Pool.Managed)
’Direct3Dフォントインスタンスを生成
Fon = New Microsoft.DirectX.Direct3D.Font(dev, New System.Drawing.Font("MS ゴシック", 14, FontStyle.Regular, GraphicsUnit.Pixel))End Sub
=======キーダウンイベントを定義
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode
Case Keys.Up ’上キーが押されたとき
s += 1
If s = 361 Then s = 0Case Keys.Down ’下キーが押されたとき
s -= 1
If s = -1 Then s = 360End Select
Me.Text = s
Draws(s)
End Subコメントを詳しく記述していなくて申し訳ございませんm(_ _)m
そしてVS.NETに怒られるラインはDrawsメソッドの7行目です。
ここで『エラー 1 class 'Microsoft.DirectX.Direct3D.Font' に同じ名前のメンバが多種類存在するため、'DrawText' があいまいです。』
といわれてしまいます。 -
Fon.DrawText(spr, "test", 0I, 0I, System.Drawing.Color.White)
上のように引数の整数値にInteger型を示すリテラル”I(アイ)”を負荷してもだめでしょうか。もしくはInteger型の変数を宣言しておき渡してあげるとか。
Dim x As Integer = 0
Dim y As Integer = 0
Fon.DrawText(spr, "test", x, y, System.Drawing.Color.White)
VisualBasicでは通常0はInteger型であると見なされますが、変数型にセンシティブなところ(プロシージャのオーバーロード)では、明示的にコンパイラに対して型がわかるようにしておいた方が良いと思います。