07
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ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Xml 読み込み

xmlの処理一応完成
以下のようにやれば良いんですが単調作業が多く…
while (reader.Read())
{


if (reader.NodeType == XmlNodeType.Element)
{

switch (reader.LocalName)
{
case "enemy":
// 属性ノードへ移動
reader.MoveToAttribute(i);
// 属性名、及び属性の値を表示
if (Confirm("index")){//属性がindexの時の処理}
}
}
}

更にまだBexierEnemy(ベジエ曲線を軌道にとる敵)は組み込めていません
定義した敵はEnemyDictionary(Dictionary)に登録して
その後Stageというクラス(List,List,List)でおのおののステージを作っています。
こうしておけば後で色々付けられますしね。
スクリプト作るよりはだいぶ楽ですよ(タブン)。
やったこと無いけど
スポンサーサイト

ベジエ曲線上を移動する敵

無題

上の画像のような感じで出来ました。

ドット絵は6時間ぐらいで制作してます。
頑張って東方の劣化コピー状態…
因みに外枠は左右対称なのは内緒
みどりのは自機で製作時間10分くらいだったと記憶

敵の方は当たり判定とかを決めたいので出来るだけ詳細に

さて、次はXML

とりあえず
現在の自分の場所X,Y
最初に出現した場所FX,FY
を変数で取れるようにはしたいです~
(幸いJScriptという物が…)

ベジエ曲線

少しでもバリエーションを増やすためにベジエ曲線を描く(正確には大量の点)プログラムを書きました。
ドット絵も一応…ね…

ベジエ曲線の書き方ですがwikipediaを元にこんな感じで

/// <summary>
/// pの各店を制御点としたベジエ曲線
/// </summary>
/// <param name="n">n返す点の数</param>
public Point[] Bexier(int num, params Point[] p)
{
Point[] o=new Point[num];
double d = 1.0 / num;
int N = p.Length;
for (int j = 0; j < num; j++)
{
//j=0→p.Length
for (int i = 0; i <= N - 1; i++)
{
double b = Bern(d * j, N - 1, i);
o[j].X += (int)(p[i].X * b);
o[j].Y += (int)(p[i].Y * b);
}
}
return o;

}

public double Bern(double t, int n, int i)
{
double d = Math.Pow(t, i) * Math.Pow((1.0 - t), n - i);

return Com(n, i) * d;

}

.NetにもDrawBezierという物があるのですが描くだけなので自前で作るしかなかったという…

これを敵の行動に組み込みます

因みに適当に作ってあるので実際描画するとがたがたになります。
が、STGで使うだけなので余り問題ない…かな?

敵行動の構造体

一応こんな感じでmove1等が設定された行動です

#region 基本行動
public long Time;//総移動時間-1なら画面外まで
public double SpeedX;//X軸
public double SpeedY;//Y軸
public double speed;
public double Speed { set { speed = value; } get { return (speed == -1) ? (speed = Math.Sqrt(SpeedX * SpeedX + SpeedY * SpeedY)) : speed; } }//時期に突っ込むなどの場合
public double AccX;//加速度
public double AccY;
public double MaxSpeed;//最大速度
public long Max;//最大移動時間
long Count;//現在何番目か
public bool End { private set; get; }//終わったか終わってないか

public bool Exist { get; private set; }
#endregion
Enemy Enemy;//行動する敵
public int Type;//行動タイプ0→マニュアル他

#region コンストラクタ
public Move(Enemy e):this()
{
Enemy = e;
Exist = true;
End = false;
speed = -1;
}
public void Add(long time)
{
Enemy.MoveTable.Add(time, this);
}
#endregion

#region 既定変数
public int First;
public int Next;
public double NextSpeed;
#endregion

#region ループ
public void Loop()
{
switch (Type)
{
case 0:
DefaultMove();
break;
case 1:
move1();
break;
case 2:
move2();
break;
case 3:
move3();
break;
case 4:
move4();
break;
case 5:
move5();
break;
}
Count++;
}

void DefaultMove()
{
Enemy.x += SpeedX;
Enemy.y += SpeedY;
SpeedX += AccX;
SpeedY += AccY;
}
#endregion

絵心な~ぃ

どうも僕です。
なんと、敵にダメージを与えて倒すことが出来るようになりました!!

以下実装した物

1,敵の動き5種類
もっと増やしたい…
2,当たり判定処理
面倒くさいので円と円の判定にしました
3,枠を付ける
空の背景にしてみました。
地味に面倒くさかったです。
(四角形を4つ描くわけですから)

ショットは全方位、奇数、偶数弾実装しましたよ
東方の霊夢みたいな誘導ショットもやりたいですね~
(別に難しくはないですよ)



あとは

敵の攻撃(無くても何とかなるんですけどね)
スクリプト(XMLでやります)

↑typeで大きさや当たり判定などを決める
nameをHashtableでかんりする
EnemyクラスにはIClonableインターフェイス付きで
Cloneしたりします

そして最大の難所
ドット絵!!
多少はやるんですけど全く絵心がない…
東方の妖精当たり見た目パクってしまおうかしら…
(↑そんな技術ありません)

とりあえず
当たり判定とか大きさ、Textureなどは同じグラフィックなら共有できると思うんですよね。
とりあえず32*32か64*64の敵グラを2~3種類作りたい…
(↑頑張りますよ…^^;)
見た目敵には東方の妖精か喰←某漫画のキャラです。
みたいな感じにしたいな~
主人公は毬藻を予定…(何

検索フォーム

RSSリンクの表示

リンク

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

ブロとも申請フォーム

この人とブロともになる

QRコード

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