/**
* 操作游戏中的人物
*
* @time 上午11:27:35
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
@SuppressWarnings("unused")
public class PlaySurfaceView extends SurfaceView implements Callback, Runnable {
private int screenX, screenY;
private SurfaceHolder sfh;
private Thread thread;
private Canvas canvas;
private boolean flag;
private Paint paint;
private Bitmap person;// 人物图片
private final int DIR_LEFT = 0;
private final int DIR_RIGHT = 1;
// 人物的方向(默认是向右)
private int dir = DIR_RIGHT;
private int person_x, person_y;// 人物的位置坐标
private boolean isUp, isDown, isLeft, isRight;// 处理按键卡现象
private int currentFream;// 当前帧
public PlaySurfaceView(Context context) {
super(context);
sfh = this.getHolder();
sfh.addCallback(this);
paint = new Paint();
paint.setColor(Color.WHITE);
paint.setAntiAlias(true);
this.setFocusable(true);
// 获得人物图片
person = BitmapFactory.decodeResource(this.getResources(), R.drawable.robot);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
screenX = this.getWidth();
screenY = this.getHeight();
flag = true;
thread = new Thread(this);
thread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
flag = false;
}
@SuppressWarnings("static-access")
@Override
public void run() {
while (flag) {
try {
long start = System.currentTimeMillis();
// 绘图
draw();
// 游戏逻辑
logic();
long end = System.currentTimeMillis();
if (end - start < 50) {
thread.sleep(50 - (end - start));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* 绘制图形
*/
private void draw() {
try {
canvas = sfh.lockCanvas();
if (null != canvas) {
canvas.drawColor(Color.WHITE);
// 绘制帧动画
drawFream(currentFream, canvas, paint);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != canvas) {
sfh.unlockCanvasAndPost(canvas);
}
}
}
/**
* 绘制帧动画
*
* @param paint
* 画笔
* @param canvas
* 画布
* @param currentFream
* 当前帧
*/
private void drawFream(int currentFream, Canvas canvas, Paint paint) {
// 取得上帧图片的高和宽
int freamW = person.getWidth() / 6;
int freamH = person.getHeight() / 2;
// 位图每列的帧数
int FreamRowNum = person.getWidth() / freamW;
// 得到帧相对于位图的坐标
// x
int x = currentFream % FreamRowNum * freamW;
// y
int y = currentFream / FreamRowNum * freamH;
canvas.save();
// 绘制与人物相同大小的可视区域 (默认是向右移动)
canvas.clipRect(person_x, person_y, person_x + freamW, person_y + freamH);
// 如果是向左移动
if (dir == DIR_LEFT) {
// 镜向反转
canvas.scale(-1, 1, person_x + freamW, person_y + freamH);
}
// 绘图
canvas.drawBitmap(person, person_x - x, person_y - y, paint);
canvas.restore();
}
/**
* 游戏逻辑
*/
private void logic() {
// 移动动画
if (isUp) {
person_y -= 5;
}
if (isDown) {
person_y += 5;
}
if (isLeft) {
person_x -= 5;
}
if (isRight) {
person_x += 5;
}
// 跑动动画
currentFream++;
if (currentFream >= 12) {
currentFream = 0;
}
}
/********************** 按键事件临听 *************************/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
// 向上
case KeyEvent.KEYCODE_DPAD_UP:
isUp = true;
break;
// 向下
case KeyEvent.KEYCODE_DPAD_DOWN:
isDown = true;
break;
// 向左
case KeyEvent.KEYCODE_DPAD_LEFT:
isLeft = true;
dir = DIR_LEFT;
break;
// 向右
case KeyEvent.KEYCODE_DPAD_RIGHT:
isRight = true;
dir = DIR_RIGHT;
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
// 向上
case KeyEvent.KEYCODE_DPAD_UP:
isUp = false;
break;
// 向下
case KeyEvent.KEYCODE_DPAD_DOWN:
isDown = false;
break;
// 向左
case KeyEvent.KEYCODE_DPAD_LEFT:
isLeft = false;
break;
// 向右
case KeyEvent.KEYCODE_DPAD_RIGHT:
isRight = false;
break;
}
return super.onKeyUp(keyCode, event);
}
/*********************************************************/
}
相关推荐
android游戏开发实例源代码
android游戏开发实例源代码
推荐一本Android游戏开发方面的书
Mario.Zechner的《Beginning Android Games》 Aprees出的。正在研究中,已经在读第二遍了。感觉内容写的很不错。
从零开始Android游戏编程(第二版).
从零开始Android游戏编程(第二版).文档资料,学习使用
游戏开发完整学习路线,都在这里了
在软件开发中,游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指路,是可以事半功倍的。 平台与编程语言选择 首先,游戏开发的平台就有很多类型: 个人主机平台:Windows、Linux、Mac OC; 移动平台:iOS、Android、Windows Phone、BlackBerryOS、Sy...
从零开始Android游戏编程(第二版)
从零开始Android游戏编程(第二版),由一位高人所写,本人收集整理成word形式放到一块方便大家学习研究。
13.5元低成本模拟乘法器AD633JN实测:手把手教你避开那些坑
本文以13.5元低成本模拟乘法器AD633JN为核心,通过实测搭建混沌电路的全过程,手把手教你避开电源灌流、芯片发烫、输入偏置等常见陷阱。文章详细剖析了AD633JN的比例因子、输入阻抗等关键特性,并提供了正确的电源去耦、信号耦合及稳定性布线方案,旨在帮助硬件爱好者与工程师高效利用这款高性价比芯片,节省调试时间与成本。
如何从零学习游戏开发
如何做游戏?从哪里开始学习?找工作需要会哪些东西?我已经工作只想业余时间做游戏该学什么?不知道你是不是和当初的我一样有很多困惑。根据我自身的经验带你去了解如何开始学习游戏开发。 我目前已经 工作2年了,大学时期也是自学编程,自学游戏开发,从而走上了游戏开发这条路,希望这篇文章能帮助到现在的你,少走一些弯路。(写这篇文章的目的是,我现在业余时间比较多,想做个公众号,会定期分享我的学习路线,学习笔记,我们一起进步。PS:本人理科生,文采不好,排版用的也不熟悉,请见谅,我会努力的)。 想从...
(二)目标检测之 HOG+SVM 算法
文章目录一、概述二、方法概述三、积分图四、AdaBoost五、级联检测六、结果七、复现八、总结参考资料 一、概述 梯度直方图HOG(Histogram of Oriented Gradients)是法国人Dalal在2005年CVPR会议上提出的特征提取算法,并将其与 SVM 配合,用于行人检测。论文地址:Histograms of oriented gradients for human detection HOG有个优点,提取的边缘和梯度特征能很好的抓住局部形状的特点,且因是对图像做了Gamma
游戏开发学习路线
当你在吃鸡,王者农药的时候是否有想过如何才能做出一款这样让人神迷的游戏? 游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指引,是可以事半功倍的。 下面就结合自己的学习历程和大家分享下游戏开发的学习路线。 1.介绍 游戏开发分为客户端和服务端两条不同的路线,路线不同,所需的技能也不同。 但有些...
三运放仪表放大器电路设计全解析:从原理到PCB布局避坑指南
本文深度解析三运放仪表放大器电路设计,从差分放大器原理演进到经典三运放架构,详细阐述了其高共模抑制比(CMRR)和高输入阻抗的核心优势。文章重点剖析了电阻匹配、PCB布局对称性等关键设计要点对性能的影响,并提供了基于LTspice的仿真分析与从原理图到PCB布局、焊接调试的全流程实战避坑指南,助力实现高精度信号调理。
详解卷积神经网络(CNN)
卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。
【精华】安卓开发学习路线规划
近一段时间经常被朋友问到如何从零开始学习安卓,成为一名安卓开发工程师。不得不感叹,现在各行各业都有不少人在涌向IT/互联网行业,希望从事程序开发工作,竞争越来越激烈了。借此机会,我梳理了一下自己所学所知的安卓知识,制定了这份安卓开发学习路线规划,希望能帮助到有志于安卓开发的伙伴能尽快找到学习的方向,进入安卓开发的大门! 一、安卓开发学习路线 安卓开发可以从深度和广度两个维度进行学习。大方向上看,Android在向诸如Flutter这样的跨平台技术演进,混合式开发、大前端等正成为移动端的发展方向和热门
【ESD专题】从原理上分析TVS管PCB Layout的经验法则
我们常常会听到的一些经验法则,按这些经验法则去做,一般也不会有什么问题,但是到底是为什么呢? 没有从原理上分析和证明的时候,往往在Layout之后还要担心实际测试结果怎么样。或是在实际测试出问题后,根本无法进行分析,难道说修改一个版本就好了?那要从哪里修改呢?也无从下手呀。...
你知道如何从零开始学c++游戏编程吗
在软件开发中,游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指路,是可以事半功倍的。平台与编程语言选择首先,游戏开发的平台就有很多类型:个人主机平台:Windows、Linux、Mac OC;移动平台:iOS、Android、Windows Phone、BlackBerryOS、Symbian;专业主...
CloudCompare源码分析之CCCoreLib模块:ICP算法(阅读经典)
CloudCompare源码分析之CCCoreLib模块:ICP算法(阅读经典)
Chrome DevTools MCP 实战完整教程
本教程介绍了Chrome DevTools MCP(Model Context Protocol)在智能Web测试中的应用。该系统通过MCP协议将Chrome开发者工具能力标准化,并与AI结合,提供了统一的测试解决方案。核心功能包括智能自动化、深度调试分析和性能监控优化。教程详细讲解了环境搭建、MCP服务器配置、参数说明及多种工具集(输入自动化、导航、设备仿真、性能分析等)的使用方法。通过mcp-use库的MCPAgent和MCPClient组件,用户可以轻松实现自然语言驱动的浏览器操作和测试流程管理。
游戏开发完整学习路线
在软件开发中,游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指路,是可以事半功倍的。 线路一:只使用游戏引擎 对于第一条路线,游戏引擎的使用并不困难,因此适合想快速上手游戏开发工作的人。我们工作大多数时候也不会自己开发游戏引擎,所以这样对于一般的日常工作也没什么大碍。对于只使用游戏引擎的人来说,入...
uniapp - 解决真机调试报错 request:fail abort statusCode:-1 java.security.cert.CertPathValidatorException: Tr
uni-app,真机调试报错,app端平台,安卓Android,安卓App发布线上报错,打包后接口请求失效了,api接口报错,真机运行安卓app时接口不通且报错,request:failabortstatusCode:-1java.security.cert.CertPathValidatorException:Trustanchorforcertificationpathnotfound.,真机调试,苹果ios真机报错,Uniapp打包到app后报错,uni-app真机调试报错,服务器
想从事游戏开发的队友们,5个阶段学习路线给你准备好了!(含引擎/书籍资源)
如今的90后、00后谁不在闲暇之余开黑两把,都觉得自己的休息时间“不完整”。游戏产业的布局越来越广阔,不仅局限于娱乐,游戏孵化、功能游戏、跨界应用(将电子游戏的元素、涉及、技术和架构创兴应用于医疗、教育、军事、企业培训、社会管理等垂直领域)这些将逐一实现。 越来越多的年轻人希望将游戏这项爱好和职业相关联起来,为自己的职业发展寻找更多的可能性,例如:游戏开发、游戏运营、动画设计、电竞职业选手等等… 在软件开发中,游戏开发这个方向看起来是最吸引年轻人的并且目标最明确的,但其实是个领域很广的方向,为什么这么说?慢
数学建模模型总结
这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
android游戏开发学习笔之九 (学习书籍 Android游戏编程之从零开始)
/** * 矩形碰撞 * * @time 上午11:29:26 * @author retacn yue * @Email zhenhuayue@sina.com */ @SuppressWarnings("unused") public class RectCollisionSurfaceView extends SurfaceView implements Cal
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
1137



被折叠的 条评论
为什么被折叠?



