人物移动

ronaldo17 2004-10-09 04:25:06
我的人物在移动的时候比如我按了up键,他就会一直往up方向走,不停下来,直到我按了其他键,比如我再按了down键,她又往down方向走,同样不停下来,不知道是为什么
我得move函数是这样写的:
void man::move(int where)
{
switch(where)
{
case 0:
if(man1.tx<0)
man1.tx=0;
if(man1.tx>640)
man1.tx=640;
if(man1.ty<0)
man1.ty=0;
if(man1.ty>480)
man1.ty=480;

MakeRect(0,32);
man1.tx-=10;
lpDDSBuffer->BltFast(man1.tx,man1.ty,lpDDSSprite,&r,SrcKey);
break;
case 1:
if(man1.tx<0)
man1.tx=0;
if(man1.tx>640)
man1.tx=640;
if(man1.ty<0)
man1.ty=0;
if(man1.ty>480)
man1.ty=480;

MakeRect(0,0);
man1.ty+=10;
lpDDSBuffer->BltFast(man1.tx,man1.ty,lpDDSSprite,&r,SrcKey);
break;
case 2:
if(man1.tx<0)
man1.tx=0;
if(man1.tx>640)
man1.tx=640;
if(man1.ty<0)
man1.ty=0;
if(man1.ty>480)
man1.ty=480;

MakeRect(0,96);
man1.tx+=10;
lpDDSBuffer->BltFast(man1.tx,man1.ty,lpDDSSprite,&r,SrcKey);
break;
case 3:
if(man1.tx<0)
man1.tx=0;
if(man1.tx>640)
man1.tx=640;
if(man1.ty<0)
man1.ty=0;
if(man1.ty>480)
man1.ty=480;

MakeRect(0,64);
man1.ty-=10;
lpDDSBuffer->BltFast(man1.tx,man1.ty,lpDDSSprite,&r,SrcKey);
break;
}
}
由于上次的教训我没有在鼠标事件里面重画图,只是做了标记,然后在refreshs()函数里面画图
void refresh()
{
MakeRect(0,0,640,480);
lpDDSBuffer->BltFast(0,0,lpDDSMap,&r,NoKey);
if(enable==1)
man1.move(up);
if(enable==2)
man1.move(down);
if(enable==3)
man1.move(left);
if(enable==4)
man1.move(right);
Flip();
}
能帮我看看什么问题吗,我个人认为是move里面哪个自加或自减的问题,但如果不这样,人物就不可能移动啊?晕死

...全文
254 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ronaldo17 2005-03-30
  • 打赏
  • 举报
回复
终于搞定了,感谢大家给我的帮助,主要原理就是唧唧歪歪说得画图和计算坐标不再一起,然后再添加一个enable=0的画图就解决了!
散分啦,来者有份啊!
ronaldo17 2005-03-30
  • 打赏
  • 举报
回复
这样的话,人物又不能停下来,他回向着一个方向一直移动
反正就是这两个问题不能兼容,要么人物可以一步一步走,那样人物移动后不能显示,要么人物可以显示,但是他会不停的向着一个方向移动,怎么才可以同时解决啊
cooljjyy 2005-03-29
  • 打赏
  • 举报
回复
当enable不是1,2,3,4的时候你没有画人物,当然不会出现啊。
你的画人物放到move()函数里面了,这个不对。move()应该只处理坐标的变化,
画人物单独提取出来,不管任何情况都需要画的。
ronaldo17 2005-03-29
  • 打赏
  • 举报
回复
好久没有来了
这个帖子都沉低了哟,可是问题还是没有解决啊!有那位高手能给我指点啊,我可以把源代码传给他
我估计可能是算法的问题,也不知道对不对!!
danfeng 2004-10-19
  • 打赏
  • 举报
回复
贴出代码来吧 应该是个很简单的问题
测试九宸 2004-10-18
  • 打赏
  • 举报
回复
把refresh()函数中加入

else if (enable==1)
{
//在图层上贴人物的语句
}

因为你每次都把图层重画了。 当然人物会消失.
xspuu168 2004-10-14
  • 打赏
  • 举报
回复
这是肯定的啊,enable的值不清空的话你那个refreshs()函数就会一直画图的。
游戏里经常有这种问题,有时候很难排除。
ronaldo17 2004-10-14
  • 打赏
  • 举报
回复
各位朋友,的确像你们说的那样是这个问题,可是我改了以后只有在移动(也就是按键的时候)才出现人物,按键完后人物会在图上消失不见,这又是何解啊
测试九宸 2004-10-13
  • 打赏
  • 举报
回复
我也同意楼上, 可以把enable的值在每次完成动作后置零
danfeng 2004-10-11
  • 打赏
  • 举报
回复
myling(AD) 说的肯定不对 就算是写在keypress里也不过按一下建走2次而已

to:楼主
你的refresh里面在处理完行动后,我没有看到你的把enable=0的代码。你每次refresh时 enable都有值,当然人物会不停的走动了
danfeng 2004-10-10
  • 打赏
  • 举报
回复
你在refresh后有没有清空 enable的值呢 ~~~
ronaldo17 2004-10-10
  • 打赏
  • 举报
回复
不是这个原因,我就是写在keydown下面的
myling 2004-10-10
  • 打赏
  • 举报
回复
写在keydown下,不要写在keypress中

或者在keyup时做下处理

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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