用C#写坦克大战刚画了个红点,现在该移动它了,可是移不了,哪儿出问题了请教下。

wallier 2009-12-29 11:15:27
用C#写坦克大战刚画了个红点,现在该移动它了,可是移不了,哪儿出问题了请教下。

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;
using System.Drawing.Drawing2D;

namespace TankWar
{
public partial class Form1 : Form
{
int x=10, y=10;
public Form1()
{
InitializeComponent();
SetStyle(ControlStyles.Opaque,true);
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.FillRectangle (Brushes.LimeGreen, ClientRectangle);

g.FillEllipse(Brushes.Red, new Rectangle(x, y, 25, 25));
}
void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left: x -= 5; break;
case Keys.Up: y -=5; break;
case Keys.Right: x +=5; break;
case Keys.Down: y +=5; break;
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
...全文
168 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left: x -= 5; break;
case Keys.Up: y -=5; break;
case Keys.Right: x +=5; break;
case Keys.Down: y +=5; break;
}
//加上这一句,你的坦克就能跑啦
this.Refresh();
}
viena 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jimh 的回复:]
简单的话这样就可以了,如果要性能,可以考虑自己不刷新,自己先刷除原来的坦克,然后再新位置重画坦克。
[/Quote]
GDI异或笔原地重画即可擦除~
nashina 2009-12-30
  • 打赏
  • 举报
回复
前几天才下载了个例子源码,有空也看看
kensouterry 2009-12-30
  • 打赏
  • 举报
回复
做游戏的话建议使用微软的XNA框架,或者C++了。
jimh 2009-12-30
  • 打赏
  • 举报
回复
简单的话这样就可以了,如果要性能,可以考虑自己不刷新,自己先刷除原来的坦克,然后再新位置重画坦克。
chxg99 2009-12-30
  • 打赏
  • 举报
回复
估计是没有刷新的缘故,对绘图区域更新一下即可。如果不想让闪动启用双缓存。
rightyeah 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yangglemu 的回复:]

            //加上这一句,你的坦克就能跑啦
            this.Refresh();
[/Quote]
用这个来刷新?代价够高的啊,如果Paint代码复杂一点,估计会闪烁的
wallier 2009-12-30
  • 打赏
  • 举报
回复
昨天提交完,就在登录不上来了,没能及时交流,这个问题解决了,就是没刷新,也就像大家说的简单的完成功能没有性能,闪的厉害啊,现在看看重置怎么样的。
jbo126 2009-12-29
  • 打赏
  • 举报
回复
好了没有?
wallier 2009-12-29
  • 打赏
  • 举报
回复
Keypreview 我已经改成true了。
jbo126 2009-12-29
  • 打赏
  • 举报
回复
在keydown事件里加refresh或invalidate
还不行就在里面设置个断点看按方向键是否被捕捉,如果没有就想办法让它捕捉,记得是重写个方法,isinputkey什么的!

110,572

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧