当前位置:网站首页>C# 游戏雏形 人物地图双重移动

C# 游戏雏形 人物地图双重移动

2022-06-10 14:56:00 健忘的松鼠

1. 设计出发点

准备做一个旅游短视频,想实现一个小人或汽车在百度地图上按指定路线移动的效果,把之前自己写的代码拿出来,修改完成。

主要修改内容:

(1)实现了人物地图双移动。即如果人物向屏幕中间移动,移动人物;人物向屏幕四周移动,如果可移动地图则移动地图,否则移动人物。

(2)将原先的人物单方向移动动画换成了四方向

(3)改正了按键后人物重影的问题

(4)修改了几个原先含义不明确的变量

未解决bug:按键控制人物移动时会闪烁

2. 主要更新代码

(1)定时器代码

private void T200_Tick(object sender, EventArgs e)
        {
            t200.Stop();
            Bitmap person1 = new Bitmap(person16.Width/4, person16.Height/4);
            winPoint point = new winPoint(0, 0);
            cnt++;
            if (cnt > 3) cnt = 0;
            point.X = -1*cnt * person1.Width;//不同人物动作x坐标不同
            point.Y = -1 * direct * person1.Height;
            using (Graphics g = Graphics.FromImage(person1))
            {
                g.DrawImage(person16, point);//完成人物切换和动作叠加
            }
            using (Graphics g0 = Graphics.FromImage(pictureBox1.Image))
            {
                //g0.DrawImage()
                g0.DrawImage(allBitmap, mapPoint);//不好,但不知道如何在上面解决
                g0.DrawImage(person1, personPt.X,personPt.Y);//将人物和背景叠加图绘制到地图上
            }
            pictureBox1.Refresh();
            t200.Start();
        }

(2)人物移动和地图相对移动代码

case 'D':
                    direct = 2;
                    if (personPt.X > (pictureBox1.Size.Width - person16.Width / 4)/2)//越过屏幕中间
                    {//如果地图可移动,则移动地图
                        mapPoint.X -= 10;
                        if (mapPoint.X + allBitmap.Size.Width < currBitmap.Size.Width)//地图到边了
                        {
                            mapPoint.X += 10;
                            personPt.X += 10;
                            if (personPt.X > pictureBox1.Size.Width - person16.Width / 4)
                                personPt.X = pictureBox1.Size.Width - person16.Width / 4;
                        }
                    }
                    else
                    {
                        personPt.X += 10;//还没有到屏幕中心,移动人
                        if (personPt.X > pictureBox1.Size.Width - person16.Width / 4)
                            personPt.X = pictureBox1.Size.Width - person16.Width / 4;
                    }
                    break;

原网站

版权声明
本文为[健忘的松鼠]所创,转载请带上原文链接,感谢
https://blog.csdn.net/zzlwl/article/details/125113857