プレイヤーが猫を操作する 2D トップダウン ゲームを作成しています。これを行うには、人は WASD キーを使用して移動します。Form1、GameManager、Cat、および Moveable クラスがあります。Form1 は GameManager に猫の画像リストと e.graphics (picturebox 用) を送信します。GameManager にはタイマーがあり、各ティックは猫が移動したかどうかを確認します。Cat が移動ロジックを処理します。プログラムを実行すると、猫のスプライトが最初の位置に表示されますが、キーを押しても動きません。私は自分の問題を理解できません。誰か助けてもらえますか?
ここに私のクラスがあります:
フォーム1:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CatAndMouse
{
public partial class Form1 : Form
{
GameManager myGM = new GameManager();
public Form1()
{
InitializeComponent();
newGame();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (this.myGM != null)
this.myGM.paint(e.Graphics);
}
public void newGame()
{
myGM.newGame(imgCat);
}
}
}
ゲームマネージャー:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CatAndMouse
{
class GameManager
{
Cat ca1 = new Cat();
int amount = 5;
Timer time = new Timer();
public ImageList imgCat = new ImageList();
public void newGame(ImageList cat)
{
imgCat = cat;
time.Start();
}
public void move()
{
ca1.Move(amount);
}
public void paint(Graphics g)
{
g.DrawImage(imgCat.Images[0], ca1.getLocation());
}
private void time_Tick(object sender, EventArgs e)
{
move();
}
}
}
ネコ:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CatAndMouse
{
class Cat: Moveable
{
Random myCLoc = new Random();
private Moveable myCatMove;
public Point p = new Point(100, 100);
int dir = 0;
public void Move(int n)
{
if (dir == 0)
{
p.Y = p.Y - n;
}
if (dir == 1)
{
p.X = p.X + n;
}
if (dir == 2)
{
p.Y = p.Y + n;
}
if (dir == 3)
{
p.X = p.X - n;
}
}
private void KeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.Up)
{
dir = 0;
}
if (e.KeyCode == Keys.Right)
{
dir = 1;
}
if (e.KeyCode == Keys.Down)
{
dir = 2;
}
if (e.KeyCode == Keys.Left)
{
dir = 3;
}
}
public void changeDirection()
{
}
public Point getLocation()
{
return p;
}
public void paint(PaintEventArgs e)
{
}
}
}
可動:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CatAndMouse
{
public interface Moveable
{
void Move(int n);
void changeDirection();
//Point getLocation();
void paint(PaintEventArgs e);
}
}
したがって、KeyDown() を呼び出すものはありません。KeyEventArgs e が必要な場合、KeyDown() を呼び出すにはどうすればよいですか?
Picturebox1 には keydown イベントがありませんが、form1 にはあります。また、cat クラスで keydown イベントを使用して、自分が向いている方向を認識し、移動する方向を認識する必要があります。