新しい記事を書く事で広告が消せます。
Ads by Google
新しい記事を書く事で広告が消せます。
わっつあばうと『きゃっちま』
このページはサークル『スマイルキッチン』によるPC用お絵かきチャットゲームっぽいソフト『きゃっちま』の開発状況をつらつらと書くところでした。
ルールは単純
出題者が何のお題を指定されて描いているかを残りの人が当てるだけ。ええ、アレです。
サイトを統合しました。以後『きゃっちま』の最新情報はこのサイトを見て下さい。
『きゃっちま製作者blog』へ
ルールは単純
出題者が何のお題を指定されて描いているかを残りの人が当てるだけ。ええ、アレです。
サイトを統合しました。以後『きゃっちま』の最新情報はこのサイトを見て下さい。
『きゃっちま製作者blog』へ
【C#】 例外処理(try catch)で未割り当てのローカル変数
HttpWebResponse res = null;
try
{
res = req.GetResponse() as HttpWebResponse;
}
catch (WebException we)
{
if (we.Status == WebExceptionStatus.ProtocolError)
{
if (res.StatusCode == HttpStatusCode.Forbidden)
{
MessageBox.Show("403");
Environment.Exit(-1);
}
}
}
既定のコンストラクタを持たないクラスで生成時に例外が発生するような場合
tryスコープの中でしかオブジェクト生成出来ない。
とりあえず null を入れておけば未割り当てとは言われない。
try
{
res = req.GetResponse() as HttpWebResponse;
}
catch (WebException we)
{
if (we.Status == WebExceptionStatus.ProtocolError)
{
if (res.StatusCode == HttpStatusCode.Forbidden)
{
MessageBox.Show("403");
Environment.Exit(-1);
}
}
}
既定のコンストラクタを持たないクラスで生成時に例外が発生するような場合
tryスコープの中でしかオブジェクト生成出来ない。
とりあえず null を入れておけば未割り当てとは言われない。
【XNA】 FPS的な回転について
Vector3.Up と Vector3.Right を軸に回転すればいい。
横方向の回転はWrap、縦方向の回転はClampしてやる。
回転を保存するフィールド Vector2 Player.Angle があるとするならば、
public class Stage1 : Scene , IGameScene
{
public void Update(GameTime gameTime)
{
// ...
Player.Angle += PadState.RightStick;
// ...
player.Update(gameTime);
}
}
public class Player
{
public Vector2 Angle;
// 回転
public Quaternion RotationQ { get; private set; }
public void Update(GameTime gameTime)
{
Angle.X = MathHelper.WrapAngle(Angle.X);
Angle.Y = MathHelper.Clamp(Angle.Y, (float)-Math.PI/2, (float)Math.PI/2);
RotationQ = Quaternion.CreateFromAxisAngle(Vector3.Up, Angle.X)
* Quaternion.CreateFromAxisAngle(Vector3.Right, Angle.Y);
}
}
横方向の回転はWrap、縦方向の回転はClampしてやる。
回転を保存するフィールド Vector2 Player.Angle があるとするならば、
public class Stage1 : Scene , IGameScene
{
public void Update(GameTime gameTime)
{
// ...
Player.Angle += PadState.RightStick;
// ...
player.Update(gameTime);
}
}
public class Player
{
public Vector2 Angle;
// 回転
public Quaternion RotationQ { get; private set; }
public void Update(GameTime gameTime)
{
Angle.X = MathHelper.WrapAngle(Angle.X);
Angle.Y = MathHelper.Clamp(Angle.Y, (float)-Math.PI/2, (float)Math.PI/2);
RotationQ = Quaternion.CreateFromAxisAngle(Vector3.Up, Angle.X)
* Quaternion.CreateFromAxisAngle(Vector3.Right, Angle.Y);
}
}
【XNA】 Joypadのスティックとマウス両方での照準移動
まずスティックの状態を代入した後に += して丸め込めば
Joypadとマウスどちらでも操作出来るようになるはず。
ただ長さの取得が発生するからメソッドにしないで直接書いた方が再利用出来ていいのかも?
public class InputManager : ManagerBase
{
float MouseSensi = 0.1f;
Vector2 RightStick = Vector2.Zero;
public void Update(GameTime gameTime)
{
// ……
Vector2 RightStick;
RightStick = gamePadState.ThumbSticks.Right; // 右スティックの正規化ベクトル
RightStick += MousePosDiff * MouseSensi; // マウスの移動量 * マウス感度
RightStick = RightStick.Clamp2(1f);
}
}
public static class Vector2Ex
{
/// <summary>
/// ベクトルの長さを指定した値に丸める
/// </summary>
/// <param name="max">最大値</param>
public static Vector2 Clamp2(this Vector2 vec, float max)
{
float len = vec.Length();
if (len > max)
{
max /= len;
vec *= max;
}
retrun vec;
}
}
Joypadとマウスどちらでも操作出来るようになるはず。
ただ長さの取得が発生するからメソッドにしないで直接書いた方が再利用出来ていいのかも?
public class InputManager : ManagerBase
{
float MouseSensi = 0.1f;
Vector2 RightStick = Vector2.Zero;
public void Update(GameTime gameTime)
{
// ……
Vector2 RightStick;
RightStick = gamePadState.ThumbSticks.Right; // 右スティックの正規化ベクトル
RightStick += MousePosDiff * MouseSensi; // マウスの移動量 * マウス感度
RightStick = RightStick.Clamp2(1f);
}
}
public static class Vector2Ex
{
/// <summary>
/// ベクトルの長さを指定した値に丸める
/// </summary>
/// <param name="max">最大値</param>
public static Vector2 Clamp2(this Vector2 vec, float max)
{
float len = vec.Length();
if (len > max)
{
max /= len;
vec *= max;
}
retrun vec;
}
}
C76について
やっつけ製作所 2日目(土)東Q49a です。多分、無料配布でなんか出ます。
今回作っているゲームをプレイするにはXNA Frameworkが必要です。
製作進行状況的には1ステージ仕上げるのを最終目標とすると55%ぐらいです。
今回作っているゲームをプレイするにはXNA Frameworkが必要です。
製作進行状況的には1ステージ仕上げるのを最終目標とすると55%ぐらいです。