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;

  

C# 游戏雏形 人物地图双重移动的更多相关文章

  1. HTML5 2D平台游戏开发#6地图绘制

    此前已经完成了一部分角色的动作,现在还缺少可以交互的地图让游戏看起来能玩.不过在开始之前应当考虑清楚使用什么类型的地图,就2D平台游戏来说,一般有两种类型的地图,Tile-based和Art-base ...

  2. 3D 沙盒游戏之人物的点击行走移动

    前言 在 3D 游戏中,都会有一个主人公.我们可以通过点击游戏中的其他位置,使游戏主人公向点击处移动. 那当我们想要实现一个"点击地面,人物移动到点击处"的功能,需要什么前置条件, ...

  3. cocos2d-x游戏开发系列教程-坦克大战游戏加载地图的编写

    上节课写了关卡选择场景,那么接下来写关卡内容,先写最基本的地图的加载 我们新建一个场景类,如下所示: class CityScene : public cocos2d::CCLayer { publi ...

  4. 3D游戏中人物换装解决方案

    换装基本上是每个网游都必须有的一个功能,每种网游的做法都各有不同,有些是换掉整个模型,有些则是通过可以换掉模型的一个部分完成.前者属于整体换,相对简单些:后者则是通过部分替换实现,目前用的比较多,本文 ...

  5. [Canvas]RPG游戏雏形 (地图加载,英雄出现并移动)

    源码请点此下载并用浏览器打开index.html观看 图例: 代码: <!DOCTYPE html> <html lang="utf-8"> <met ...

  6. 《MFC游戏开发》笔记十 游戏中的碰撞检测进阶:地图类型&障碍物判定

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9394465 作者:七十一雾央 新浪微博:http:// ...

  7. (NO.00002)iOS游戏精灵战争雏形(一)

    原本想做一个复杂点的平面动作游戏,可以觉得还是有点把握不了.还是先从简单的原型开始吧. 构思中的精灵战争(SpriteWar)是一个类似FC时代的小游戏,可以造兵,可以捕获敌兵.原本还想加上保卫老巢的 ...

  8. Atitit 游戏的原理与概论attilax总结

    Atitit 游戏的原理与概论attilax总结 1. 游戏历史2 1.1.1. 盘点PC游戏史上最重要的50款游戏2 1.1.2. 回味人类文明进程 五款经典的历史游戏2 2. 游戏类型(主要分为6 ...

  9. 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9344721 作者:七十一雾央 新浪微博:http:// ...

  10. unity3d 2d游戏制作的模式

      经过了4个月不懈的努力,我和图灵教育合作的这本3D游戏开发书预计下个月就要出版了.这里MOMO先打一下广告,图灵的出版社编辑成员都非常给力,尤其是编辑小花为这本书付出了很大的努力,还有杨海玲老师, ...

随机推荐

  1. Redis基本操作(2)

    一.list类型 列表的元素类型为string 按照插⼊顺序排序 增加.修改 例1:在左侧插⼊数据 lpush key value1 value2 ... 例2:在右侧插⼊数据 rpush key v ...

  2. prometheus-监控docker服务器

    1. prometheus-监控docker服务器 prometheus-监控docker服务器 cAdvisor(Container Advisor):用于收集正在运行的容器资源使用和性能信息. 项 ...

  3. java注解基础知识整理

    目录 1.注解的定义 1.1.定义一个注解 1.2.注解的使用 2.JDK内置注解 2.1.java.lang包下的注释类型 2.2.元注解 2.3.Deprecated注解 3.在注解中定义属性 3 ...

  4. JavaScript 中URL 查询字符串(query string)的序列与反序列化

    方法一: 在 JavaScript 中,可以使用 URLSearchParams 对象来处理 URL 中的查询字符串. 序列化(将 JavaScript 对象转换为查询字符串)可以使用 URLSear ...

  5. [WPF]项目整合Metro和MaterialDesignInXamlToolkit UI框架

    项目地址 MapApps:Metro MaterialDesignInXamlToolkit:MaterialDesignInXamlToolkit MapApps官网:官网链接 官方整合文档 官方提 ...

  6. 异常的产生过程解析-throw关键字

    异常的产生过程解析 先运行下面的程序,程序会产生一个数组索引越界异常ArrayIndexOfBoundException.我们通过图解来解析下异常产生的过程. 工具类 throw关键字 在编写程序时, ...

  7. Android第五次作业

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  8. 线程、GIL、协程

    1.多进程实现TCP服务端并发 1.之前我们学习了一个服务端对应一个客户端的操作,但是我们无法实现一个服务端对应多个客户端的操作.因此我们需要在pycharm的右上角点击倒三角,选择Edit Conf ...

  9. Typora软件的使用、编程与编程语言、计算机基础、五大组成部分、三大核心硬件、操作系统

    目录 一.Typora软件的下载与使用 (1).软件下载 (2).markdown语法 二.编程与编程语言 (1).什么是语言 (2).什么是编程 (3).什么是编程语言 三.计算机本质 四.计算机五 ...

  10. ssh 连接 wsl2

    修改ssh相关config https://cloud.tencent.com/developer/article/1538305 其中,端口可以设置成 2222 以防万一 然后在wsl 中执行如下命 ...