08
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
   

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SlimDX.Direct3D9.Fontについて


実は最近ずっと画面を移動させたら動かなくなるという現象が続いていました。
その原因がこいつ「SlimDX.Direct3D9.Font」こいつUnmanaged リソースっぽいです。
(間違ってたらゴメン)

なのでリセットしたときに一旦Disposeしてやらないとおちるっぽいです。
で、ついでに前の物を流用してBitmap→Textureを作りました。
「life(仮)」開発日誌がなかったら多分ここで挫折してました本当に有り難うございます。)

これで出来るはずです。(実際大丈夫でした。)
これで描画関連が終わりました(実は回転がまだです)。
次は敵に弾を撃たせたいと思います。

アルファブレンド

まぁ何とかテクスチャ出来たわけですよ…

ぼくのばかぁああああああ~

verts[0] = new TransformedColoredTexturedVertex { Position = new Vector4() { X = x - w / 2, Y = y - h / 2, Z = 0, W = 1.0f }, TextureCoordinates = new Vector2 { X = 0.0f, Y = 0.0f } };
verts[0]=…//本人はverts[1]に代入したと思ってた…

そりゃアウトだろw
描画点がナシw

も一つ今日解決したところ

アルファブレンディングフォーラムにはDirectX10しかなかったじぇ
いろいろやってたら出来た
多分これで透過できると思う
以下コピペ用
しかし何故こうなるのかわかんない
TextureArgument.TextureをCurrentにしたら真っ白になった
それぞれの値はどうなってるのかな?


device.SetRenderState(RenderState.AlphaBlendEnable, true);
device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha);
device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha);
device.SetTextureStageState(0, TextureStage.ColorOperation, TextureOperation.Modulate);
device.SetTextureStageState(0, TextureStage.ColorArg0, TextureArgument.Texture);

次の問題が…SampleFramework使って居るんですけどね
それで60fpsに持ってくるようにしてくれるんですけどね
それの誤差が…およそ3-0であります…
かなりきつい誤差…
かといって自分で修正しようにも勝手に動いてくれるわけで…
垂直同期をとるとfpsがかなり落ち込みます…

SlimDXに切り替えてみた

MDX→SlimDXに切り替えてみた
しかしまだコンパイルが通っるけど動かない(例外で飛ぶ)状態

理由:

tex.LockRectangle(0, new Rectangle(0, 0, desc.Height, desc.Width), LockFlags.None)
の戻り値が違う…
(tex.LockRectangle(0, new Rectangle(0, 0, desc.Height, desc.Width), LockFlags.None)).Data;でStream継承されてるからこれでいこうかと思ったんだけど…
device.DrawUserPrimitives(PrimitiveType.TriangleList, 0, 2, verts);
でクラッシュ…
どうしよ…
Bitmapから遅くても生成する方法も見つからない…
英語力の問題で解説がよく分からん…orz

FromPointer(IntPtr)ってのがあったからBitmapData.Scan0に淡い望みを…
ぬるりでた…(多分途中でNull参照になったんだと思われる(Bitmap範囲外))

ただMDXで詰まったところをこれで解決できるなら…頑張ります

敵がおかしな挙動をする

どうしようw

おかしな挙動
敵が突然消えて突然出てくる

描画にOut()という画面外に出ているか出ていないかを判定する物がありまする
xとy座標だけだからそんなおかしな挙動するはず無いんだけどなぁ~

deadという死んでいるか死んでいないかのフラグがあります。
ただその時はタスクリストからはずれているのでそもそも描画が再開されない…

この挙動が起きるのは
EnemyクラスのLoopメソッド(毎フレーム呼ばれるメソッド)で作った
Enemyだけなので
完成品には影響ないだろうけどなんだかなぁ~

そしてそうすると
弾の分裂(実際は弾が弾を発射する場合によっては自身を消す)
という動作に一抹の不安が…(同じSTaskから派生しているので…)

そういえば4.0のオプション引数・名前付き引数が凄く便利そう
(便利そうと言うのは前はJavaを使っていたので使ったことがない)

TaskListにバグ(最後尾のタスクがループから外されていたら追加されたタスクも飛びます)
あったのを修正です。

出来ればXml使いたいです。
(いちいち敵ごとにクラス作るの面倒くさいしこの環境だと多分止まる…VC#)

とりあえず自機までは出来ました

実際はかってみるとTexture.Frombitmapより2倍ほど速かったです。
(大きい画像ほど顕著でした)

後は敵を作って…弾を作って…
当たり判定処理をして…

とその前に速度ですが
速度情報は、「vx(速度のx成分)」,「vy(y成分)」,
「v(速度の絶対値)」,「angle(速度ベクトルの偏角)」
にしました(どれを設定してもつじつまが合うようにプロパティにしております)

コードはこんな感じ


//それぞれの角度の速度
double VX=0, VY=-4;
//速度
double V=-4;
//角度(°の方で)
double Angle=-90;

///
/// 速度のx成分
///

public double vx
{
set
{
VX = value;
if(VX==0)
{
V=VY;
Angle=Math.Sign(VY)*90;
}
V = getV(VX, VY);
Angle = getAngle(VX, VY);
}

get { return VX; }
}

///
/// 速度のy成分
///

public double vy
{
set
{
VY = value;
if(VY==0)
{
V=VX;
Angle=90-Math.Sign(VX)*90;
return;
}
V = getV(VX, VY);
Angle = getAngle(VX, VY);
}

get { return VY; }
}

///
/// 角度
///

public double angle
{
set
{
Angle = value;

//縦だったら
if (((Angle + 90) % 180) == 0)
{
VX = 0;
VY = Math.Sign(Math.Sin(Angle))*V;
return;
}
//横だったら
else if(Angle%180==0)
{
VX = Math.Sign(Math.Cos(Angle)) * V;
VY = 0;
return;
}

VX = V * Math.Cos(getRad(Angle));
VY = V * Math.Sin(getRad(Angle));
}

get
{
return Angle;
}
}

///
/// 速度
///

public double v
{
set
{
//元が0だったら
if (V == 0)
{

VX = value * Math.Cos(getRad(Angle));
VY = value * Math.Sin(getRad(Angle));
return;
}
VX *= value / V;
VY *= value / V;
V = value;
return;

}
get { return V; }
}



///
/// x,yの角度
///

/// x成分
/// y成分
///
double getAngle(double x, double y)
{
double t = y / x;
//rad→degに
return Math.Atan(t)*180/Math.PI;

}

///
/// ベクトルの大きさ
///

/// x成分
/// y成分
///
double getV(double x, double y)
{
return Math.Sqrt(x * x + y * y);
}

///
/// Deg→Rad
///

/// 角度
/// radでの角度
double getRad(double d)
{
return d * Math.PI / 180;
}



角度が90*nの時は誤差をなくすために別計算です。

検索フォーム

RSSリンクの表示

リンク

リンクというか個人的によく使うアルゴリズムの解説サイト… C#でなかったりする

ブロとも申請フォーム

この人とブロともになる

QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。