android 手机中怎样实现十三号星期五游戏人物物的移动

&>&&>&移动开发&>&Android&>&android手机游戏开发大全》(源码)
android手机游戏开发大全》(源码)
上传大小:6.83MB
第8章 RPG类手机游戏的开发实例
  8.1 RPG游戏基本框架
  8.2 地图的构建
  8.2.1 地图的组成
  8.2.2 地表层
  8.2.2.1 地表的数据
  8.2.2.2 地表的基本绘制方法
  8.2.2.3 地表的更优绘制方法
  8.2.3 建筑层(带动画的)
  8.2.3.1 带动画的建筑层的组成
  8.2.3.2 保存和绘制单元帧的UnitFrame类
  8.2.3.3 建筑层的数组
  8.2.3.4 用切片集来构造帧
  8.2.3.5 建筑层数组
  8.2.4 角色层
  8.2.5 地表层的碰撞
  8.2.6 建筑层的碰撞
  8.3 角色系统
  8.3.1 角色系统的组成
  8.3.2 角色动作的帧类
  8.3.3 角色的动作类和角色类
  8.3.4 一个带四方向行走动作的Role类示例
  8.3.5 用按键控制角色动作切换
  8.4 地图和人物的整合显示
  8.4.1 按键控制人物移动
  8.4.2 地图的滚动
  8.4.2.1 角色的居中显示
  8.4.2.2 地图显示越界的约束
  8.4.2.3 角色越界的约束
  8.4.3 碰撞的实现
  8.4.3.1 角色帧的碰撞区域
  8.4.3.2 角色行走中和地表层碰撞的计算
  8.4.3.3 建筑层的碰撞
  8.4.4 遮挡的实现
  8.4.5 计算屏幕的裁剪区域及取消非显示区域的绘制
  8.5 脚本系统
  8.5.1 一个简单的脚本事件
  8.5.1.1 一个游戏事件的非脚本做法
  8.5.1.2 构造数据层来保存地图触发的事件
  8.5.2 常规的游戏事件
  8.5.3 自定义的脚本命令
  8.5.3.1 自动行走的脚本命令定义和实现
  8.5.3.2 多个脚本事件的解析和实现
  8.5.3.3 带有多个命令的脚本事件
  8.5.4 脚本的完成标志
  8.5.5 脚本的条件约束
  8.6 用人物动作编辑器添加人物数据
  8.6.1 完善当前的角色系统
  8.6.2 角色动作编辑器使用
  8.6.2.1 如何编辑角色
  8.6.2.2 编辑器保存的数据格式
  8.6.3 角色动作文件的解析
  8.6.3.1 ActionFrame类的载入数据方法的修改
  8.6.3.2 RoleAction类的载入数据方法的修改
  8.6.3.3 Role类的载入数据方法的修改
  8.6.3.4 容纳角色数组的Map类和数据读入
  8.7 用地图编辑器生成地图数据和角色出生点信息
  8.7.1 地表层的编辑
  8.7.2 建筑层的编辑
  8.7.3 其他人物的添加和在地图上的设置
  8.7.4 建筑数据
  8.7.4.1 建筑文件的格式
  8.7.4.2 建筑数据文件的解析
  8.7.5 地图数据的格式和解析
  8.8 从文件读入的角色的绘制和控制
  8.8.1 角色数据Copy功能的实现
  8.8.2 角色数据的创建
  8.8.3 角色的绘制
  8.8.4 角色的控制
  8.8.4.1 角色动作的添加和绘制
  8.8.4.2 主角动作按键响应处理
  8.8.4.3 应用了编辑器的角色和地图的碰撞
  8.8.4.4 主角和其他角色之间的碰撞
  8.8.4.5 主角动作控制和切换
  8.9 战斗处理
  8.9.1 攻击矩形的添加
  8.9.2 攻击的判断
  8.9.3 骷髅兵的行为模拟
  8.9.4 非玩家角色(NPC)的追踪和攻击判断
  8.9.4.1 追踪
  8.9.4.2 攻击
  8.10 用地图编辑器编辑剧情——脚本的编辑
  8.1l 地图的切换
  8.12 编辑器的原理和开发
  8.12.1 地图编辑器的需求分析
  8.12.1.1 数据格式的定义
  8.12.1.2 编辑器的界面需求分析
  8.12.1.3 编辑器的操作需求分析
  8.12.2 界面设计
  8.12.2.1 新建一个JFrame窗口程序
  8.12.2.2 在Frame中添加菜单项
  8.12.2.3 一个显示地图的JPanel界面
  8.12.2.4 添加一个显示单元的list界面
  8.12.2.5 添加输入对话框
  8.12.2.6 图层下拉框
  8.12.2.7 添加、删除单元按钮
  8.12.3 编辑器的操作设计和实现
  8.12.3.1 地图类的定义
  8.12.3.2 新建地图的实现
  8.12.3.3 图层选择的实现
  8.12.3.4 添加和删除单元的实现
  8.12.3.5 显示地图功能
  8.12.3.6 编辑地图功能
  8.12.3.7 保存和打开地图的实现
第9章 ACT类手机游戏开发实例
  9.1 游戏的基本框架
  9.1.1 引言
  9.1.2 逻辑处理部分
  9.1.2.1 定义LOGO的Image对象和计数器变量
  9.1.2.2 初始化部分
  9.1.2.3 逻辑部分
  9.1.2.4 图形界面部分(屏幕绘制部分)
  9.1.3 图形界面部分
  9.1.4 按键处理部分
  9.2 游戏地图的实现
  9.2.1 游戏地图的组成
  9.2.2 地图的程序描述
  9.2.3 地图的具体实现
  9.2.3.1 游戏场景地图的PNG资源图
  9.2.3.2 游戏场景地图在手机屏幕上的显示步骤一
  9.2.3.3 游戏场景地图在手机屏幕上的显示步骤二
  9.2.3.4 游戏场景地图在手机屏幕上的显示步骤三
  9.2.3.5 屏幕在游戏场景地图中的坐标(1eftTopX,leftTopY)与主角的关孬
  9.2.4 建筑层的实现
  9.3 ACT游戏中主角移动与地图滚动显示
  9.3.1 主角类的基本信息介绍
  9.3.2 播放当前动作的动画
  9.3.2.1 动画的原理
  9.3.2.2 动画的数据结构
  9.3.2.3 完整动作的代码实现
  9.3.2.4 具体游戏中的应用
  9.3.3 主角的程序描述
  9.3.4 在某状态下的图片显示及其动画显示
  9.3.5 通过玩家控制(按键或者触屏等)来切换游戏状态或者主角状态(主动状态切换)
  9.3.6 通过主角的动作导致的状态切换(被动状态切换)
  9.4 AcT游戏中主角其他各动作之问的切换及显示
  9.4.1 单个按键响应对主角状态的切换
  9.4.2 实现连续按键的响应
  9.4.3 实现多个按键的响应
  9.4.3.1 多键组合的实现
  9.4.3.2 条件多键组合
  9.5 ACT游戏中主角攻击与碰撞
  9.5.1 主角移动中的碰撞
  9.5.1.1 主角与地表层信息的碰撞处理
  9.5.1.2 与对象的碰撞处理
  9.6 ACT游戏中特殊技能的实现
  9.6.1 远程攻击的技能
  9.6.2 召唤攻击技能
  9.7 精灵及精灵Al的实现
  9.7.1 敌人的基本信息及状态介绍‘
  9.7.2 怪物的多种AI
  9.7.2.1 普通怪物
  9.7.2.2 追击型怪物
  9.7.2.3 远程攻击型怪物
  9.7.3 怪物与主角的区域碰撞实现
  9.8 道具系统的添加
  9.8.1 补充能量道具
  9.8.2 特殊效果道具
  9.9 剧情对话的添加(脚本实现)
  9.10 任务系统
  9.11 过场动画及特效
  9.11.1 水平开屏、关屏
  9.11.2 垂直百叶窗
  9.11.3 打开、关闭盒子
  9.12 存储
  9.12.1 记录管理系统简介
  9.12.2 RecordStore中的数据
  9.1 2.2.1 RecordStore与Record的操作
  9.12.2.2 游戏数据的存取
  9.13 音效...展开收缩
综合评分:3.3(46位用户评分)
所需积分:
下载次数:203
审核通过送C币
微信公众号和支付方面
创建者:jiangsucsdn
Android 之多种网络请求实现方式
创建者:dickyqie
android开发
创建者:qq_
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
/*删除回复*/
$(".del_comment_r").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
评论共有31条
虽然不是我想要的,但是可以参考~~
我怎么觉得有问题啊
不能用啊1~~~
不是需要的,有点乱
没有文档啊,而且内容太乱
不想说、、、用不着、、、只有第八章第九章的源码、、我想看书
文档缺的有点多啊,资源不好,不能运行
还可以,不过内容有点小
有点看不太懂,耐心看还是能学点东西的
什么啊,j2me的,不是android的
上传者其他资源上传者专辑
learn python the hard way 中文版 最新版
python 100个练手小程序
vCenterServer6.0许可证生成器
2016手机号码归属地数据库
Swifter - 100 个 Swift 必备 tips (第二版)
移动开发热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&vip年卡&4000万程序员的必选
android手机游戏开发大全》(源码)
会员到期时间:剩余下载次数:
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
VIP年卡全年1200次免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:Android研究之游戏开发主角与地图的滚动

人物移动地图的平滑滚动处理
玩过rpg游戏的朋友应该都知道RPG的游戏地图一般都比较大 今天我和大家分享一下在RPG游戏中如何来处理超出手机屏幕大小的游戏地图。
如图所示为程序效果动画图
地图滚动的原理
在本人之前博客的文章中介绍过人物在屏幕中的移动方式,因为之前拼的游戏地图是完全填充整个手机屏幕的,所以无需处理地图的平滑滚动。这篇文章我着重的向大家介绍一下控制人物移动后地图滚动的处理方式。举个例子 如上图所示 比如人物向右移动,如果地图贴在屏幕左边边界
将先移动人物在地图的坐标,当人物在屏幕中超过三分之二后 则将地图向人物行走的反方向移动给玩家一种人物还在向右移动的假象,其实这时候人物只是播放向右行走的动画
在屏幕中的坐标不变 ,当地图向人物行走反方向移动到不能移动的时候 则表示 地图右侧边界已经贴住手机屏幕右侧边界 这样地图则不能在移动 这时候将移动人物在屏幕上的坐标直到人物贴住屏幕右侧边界,其它三个方向原理完全一样。上一章学习了研究之游戏开发之进度条加载不明白的可以去看下。
代码的实现方式还是以人物向右移动为例,我们须要三个坐标 一个是m_HeroPos 来保存人物在地图中的X坐标
一个是 mScreenPos 来保存人物在屏幕中的显示坐标 mMapPos 来保存地图在手机屏幕中的显示坐标,按键盘右键后人物在地图中的坐标加上8像素(表示行走的步长),当人物的坐标超过屏幕的三分之二的时候需要检测地图是否已经在边界, 使用地图绘制在屏幕中的X坐标
加上地图的宽度 判断是否等于屏幕的宽度如果等式不成立 则表示地图可以向左放移动 这时候后人物mScreenPos人物显示坐标将不变 mMapPos地图显示坐标将向左移动人物一个步长的位置,如果之前的等式成立 则表示地图无法在向左移动
这时候mScreenPos人物显示坐标将向右移动人物一个步长的位置
直到屏幕右侧边界 mMapPos地图显示坐标不会改变。其三个方向的移动算法完全一样。
如图所示地图在平滑的滚动
拓展学习之卡马特地图缓冲算法这个游戏demo 还不能称之为完美 在与物理层碰撞中还是存在一点问题 不过 最重要的是 没有使用卡马克地图缓冲算法,下面我详细介绍一个卡马克地图缓冲算法原理。我们需要一张地图换冲图, 为了实现平滑滚动的效果缓冲图的大小应该是手机屏幕宽高 ,这样内存中就会常驻 一张 手机屏幕大小的缓冲图。 如果人物向下方行走则表示地图向上移动,这时候屏幕
将被切割出来了2部分, 上半部分为缓冲图向上移动后的缓冲内容,下半部分则就是我们需要更新地图的部分,将更新后的下半部分与地图缓冲的上半部分结合起来绘制在屏幕中则完成了一次地图更新,这样可以大大提升游戏绘制地图的效率。如果不使用这种方式来更新地图 则地图每移动一次 都须要双for循环重新一个tile一个tile的绘制一遍效率会很低下。如图所示
地图向上移动后更新绿色的地图部分 与 将上次缓冲的红色部分结合起来就是新的游戏地图,其它方向原理完全一样。
如图所示:如果游戏中可以按右下方式来移动主角 那么以屏幕右下角为圆心 地图就会被切割成4个部分下图中红色区域须要更新其中 3 个部分 地图左边超出的部分 地图下面超出的部分 地图左下方超出的部分,更新的原理和上面一样。
这么看来卡马克不愧是个游戏领域的天才,马克地图缓冲算法不愧是最最优秀的地图算法之一,大家如有有兴趣可以去查一查关于卡马特的资料,他确实是一个顶尖的游戏开发工程师。欢迎大家下载,还是那句老话每篇文章都会附带源代码的下载地址。最后如果你还是觉得我写的不够详细 看的不够爽 不要紧我把源代码的下载地址贴出来 欢迎大家一起讨论学习雨希望可以和大家一起进步。
下载:heromove安卓上有什么震撼人心的游戏大作? - 知乎5305被浏览746241分享邀请回答/r/U3Xz66bEn-vgreKI9yBB (二维码自动识别)977106 条评论分享收藏感谢收起当然 这个游戏的重点在于约饭和抱大腿(并不6927 条评论分享收藏感谢收起查看更多回答17 个回答被折叠()基于Android平台的手机游戏的设计与实现_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于Android平台的手机游戏的设计与实现
&&Android 手机游戏
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩62页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Android应用开发入门篇-拼图游戏
前一段时间为了学习android应用开发,尝试写了个简单的拼图应用,在此记录下实现流程的核心部分,同时也希望给其他开发者入门参考带来帮助。
1. 基本的界面设计
首先应该设计出各个界面(Activity)的样式以及界面间跳转需要通过Intent传递哪些数据。本例包括4个Activity:
a. MainActivity主界面,只包含1个TextView和3个ButtonView,每个按钮点击应改变难度的值,这个值应该同过Intent继续传递下去的;
b. SourceActivity图片源选取,这个界面应成Dialog对话框形式展现 ,要在AndroidManifest.xml文件中声明,然后控件采用ListView;vcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:">
c. GameActivity游戏界面,核心就是上面的1个ImageView,此外有1个ButtonView和2个TextView;
d. EndActivity最后一个结束界面没有什么特殊的,主要是为了提醒游戏结束,同样是一个Dialog风格的Activity,与b同。
有了以上4个界面这个简单的游戏框架就有了,接下来重点就是实现b和c界面中的功能了。
2. 拍照或从相册选取图片
这个首先要在Manifest.xml文件中设置下允许SD卡读写
然后,相机拍照并保存的代码如下,主要图片保存路径的设置(SD卡路径+图片文件夹路径)
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//获取SD卡对应的存储目录
File sdCardDir = Environment.getExternalStorageDirectory();
//将拍照时间作为照片文件名并保存
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss");//获取当前时间,进一步转化为字符串
String path =
path = sdCardDir.getCanonicalPath() + "/DCIM/Camera/";
} catch (IOException e) {
e.printStackTrace();
String fileName = "IMG_" + format.format(date) + ".jpg";
Uri imageUri = Uri.fromFile(new File(path, fileName));
filePath = path + fileN
//指定照片保存路径(SD卡)
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, 0);
从相册选取图片只需要如下几行
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 1);
以上两种选择图片都调用了startActivityForResult方法,主要requestCode参数需要不同,对应的响应方法及实现代码如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0 && resultCode == RESULT_OK) {
else if(requestCode == 1 && resultCode == RESULT_OK){
//The 3 lines below is useful!
Cursor cursor = this.getContentResolver().query(data.getData(), null, null, null, null);
cursor.moveToFirst();
filePath = cursor.getString(cursor.getColumnIndex("_data"));
Intent intent = new Intent();
intent.setClass(SourceActivity.this, GameActivity.class);
intent.putExtra("imgPath", filePath);//将获得的图片路径传递到GameActivity即可
intent.putExtra("level", level);
startActivity(intent);
3. 将图片随机切割
上一步传递图片路径到GameActivity,但是我们读取图像不可能把几MB的图像放在ImageView里,实际采用的是Bitmap读入图像(此时图像已被缩小),用变量记录缩小的scale。然后将这个Bitmap显示到ImageView上是没有问题的,通过设置匹配方式为centerCrop,图像会很舒服的显示出来。难题在于,点击开始后需要随机切割图像并显示。由于Bitmap虽然缩小了原图像,但是仍保持原图的长宽比,而这个比例和ImageView的比例一般是不一样的,所以如果直接在原始Bitmap上切割的话,显示在ImageView里的图像一定不是规整的3*3或5*5图块。
解决办法,需要在原始Bitmap上先进行按ImageView比例的centerCrop裁剪, 方法如下
private Bitmap centerCrop(Bitmap src, int W, int H){
int w = src.getWidth();
int h = src.getHeight();
float ratio = (float)W/H;
Bitmap dst =
if(((float)w/h) > ratio){//crop width
dst = Bitmap.createBitmap(src_bitmap, (int)((w-ratio*h)/2), 0, (int)(ratio*h), h);
}else{//crop height
dst = Bitmap.createBitmap(src_bitmap, 0, (int)((h-w/ratio)/2), w, (int)(w/ratio));
然后显示的就是规整的3*3(初级)或5*5(中级)模式了,这里省略了随机切割图像块的方法,主要就是通过Random类的对象生成随机数(但是不能重复)。此外,用到了一个Bitmap的数组来保存每个图块,一个int数组保存每个位置的图块索引。
4. 点击交换图块位置
给ImageView绑定一个OnTouchListener接口的实现,点击图像时触发。
class ImageListener implements OnTouchListener{
public boolean onTouch(View arg0, MotionEvent arg1) {
float x = arg1.getX();//get clicked x position
float y = arg1.getY();//get clicked y position
int tmp_col = (int) (x / (width/col));
int tmp_row = (int) (y / (height/row));
int new_chosen_num = tmp_row * col + tmp_
if((chosen_num != -1) && (new_chosen_num != chosen_num)){//do swap
swapBlock(chosen_num, new_chosen_num);
txt_count.setText(step+"");
chosen_num = -1;
if(mis_count == 0){//Game Win!
Intent intent = new Intent();
intent.setClass(GameActivity.this, EndActivity.class);
startActivity(intent);
}else{//set one chosen
chosen_num = new_chosen_
最后交换图像块后ImageView上的显示问题用到了Canvas,相当于把Bitmap作为一个画布,在上面画出交换结果,然后将新Bitmap显示到ImageView上。
Canvas to_draw = new Canvas(new_bitmap);
for(int i = 0; i < i++)
for(int j = 0; j < j++)
to_draw.drawBitmap(pic_arr[i * row + j], j*(tmp_width/col), i*(tmp_height/row), null);
to_draw.save(Canvas.ALL_SAVE_FLAG);
to_draw.restore();
img.setImageBitmap(new_bitmap);
img.setOnTouchListener(new ImageListener());
以上内容总结的很潦草,可能更方便自己日后查看,里面的一些代码可能缺少连贯性。只希望某些地方的处理方法能给入门的朋友一些借鉴,如果有不清楚想仔细了解的朋友请留言。

我要回帖

更多关于 游戏人物素材 的文章

 

随机推荐