【发布时间】:2016-09-22 15:26:43
【问题描述】:
过去几天我一直在研究事件和委托,我决定尝试使用这两者创建一个 MouseHandler 类。
基本上我有这个问题,鼠标点击没有注册,x 和 y 轴的位置返回为 0,不注册我只是意味着通过 console.WriteLine() 在输出控制台中显示。我已经研究了一段时间,但我没有运气,所以我想知道你们中是否有人能指出我正确的方向,不胜感激。
提前谢谢你。
MouseHandler.cs
class MouseHandler
{
public delegate void MouseEventHandler(object source, MouseEventHandlerArgs
public event MouseEventHandler MouseLeftClick;
public event MouseEventHandler MouseRightClick;
public event MouseEventHandler MouseMoved;
public MouseState mouseState = Mouse.GetState();
protected virtual void OnMouseLeftClick(MouseState m)
{
mouseState = m;
if(MouseLeftClick != null)
{
MouseLeftClick(this, new MouseEventHandlerArgs() { MouseButtonPress = m });
}
}
protected virtual void OnMouseMoved(MouseState m)
{
if (MouseMoved != null)
{
MouseMoved(this, new MouseEventHandlerArgs(){MouseButtonPress = m });
Console.WriteLine(mouseState.Position.X);
}
}
public void Update(GameTime gt)
{
OnMouseLeftClick(mouseState);
OnMouseMoved(mouseState);
}
}
MouseEventHandlerArgs
class MouseEventHandlerArgs : EventArgs
{
public MouseState MouseButtonPress { get; set; }
}
鼠标测试
class MouseTest
{
public void OnMouseLeftClick(object source, MouseEventHandlerArgs e)
{
Console.WriteLine("Mouse Left click" + e.MouseButtonPress.LeftButton);
}
public void OnMouseMoved(object source, MouseEventHandlerArgs e)
{
Console.WriteLine("you moved mouse to x " + e.MouseButtonPress.Position.X + " Y pos " + e.MouseButtonPress.Position.Y );
}
}
游戏 1 在更新方法内:
mouseHandler.MouseLeftClick += mouseTest.OnMouseLeftClick;
mouseHandler.MouseMoved += mouseTest.OnMouseMoved;
//mouseHandler.Update(gameTime);
【问题讨论】:
标签: c# events delegates xna mouse