当前位置: 首页 > news >正文

Android游戏快速入门(一):基础储备

智能手机时代已经到来了,手机的性能正在以你我惊讶的速度提升。那么手机游戏也在迅速发展,从简单的平面单机游戏不断的向复杂的3D网络游戏发展。所以,手机游戏的市场肯定也在不断扩张。那么,作为程序猿,我们也不能落后,要与时俱进,才不会被淘汰。Android是眼下最火的手机平台,那么我们选择android平台开发肯定没错。今天我们就带着大家一步步攻克android手机游戏。其实,这一切都没有那么难,一切都是自我设限。好吧,那就一起行动起来吧!


我打算陆续的把游戏中用到的技术点和我的一些体会发布到这里,不会一下子全部罗列出来,那样会增加大家的学习负担。今天,我们将讨论游戏的基础储备。


其实,游戏有很多分类,在此我就不啰嗦了,baidu搜索就有答案。我最终以大战飞机(雷电)游戏为实现目标和讲解案例。我不采用任何的游戏引擎,全部以android原生态的功能来实现。


关于游戏开发要掌握的一些基础:

1、坐标系

Android系统中,屏幕的坐标原点(0,0)跟电脑屏幕的一样,在屏幕的左上角,横向代表x轴,向右延生为正方向,纵向代表y轴,向下延生为正方向,如下图:


2、屏幕的宽度和高度

为了能让游戏角色显示在屏幕的合适位置,我们需要知道屏幕的宽度和高度作为参考。在Android获取屏幕的高宽很简单,只需要在Activity中获取WindowManager对象,然后从WindowManager对象中获取Display对象,再从Display对象中获取高宽,代码如下:

 

WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();

 

 

3、边界问题

几乎所有的游戏都需要做边界判断,比如我们要实现的飞机大战,我们需要判断玩家、敌人和子弹等视图的边界是否超过屏幕,或者他们之间有没有发生碰撞。简单来说就是判断有没有超出屏幕的边界,或者游戏角色之间有没有重叠,一般都是通过坐标(x,y)来判断的。

1) 如果x<0,那么超过了屏幕的左边界,如果x>屏幕的宽度,那么超过的屏幕的右边界。

2) 如果y<0,那么超过了屏幕的上边界,如果y>屏幕的高度,那么超过了屏幕的下边界。


4、角色或场景的移动

游戏中的角色移动其实也是简单的,就是不断的改变角色的x,y坐标的值,然后不断重新把他们绘制到屏幕里,只是这个动作的非常快,以至于人的眼睛是无法分辨。但是,这种角色坐标改变的逻辑是需要我们程序猿按照游戏的逻辑的来控制的。常常会使用到线程的知识点,不过也很简单。

1) 如果向左移动:x 的坐标减小,向右移动:x 的坐标增大;

2) 如果向上移动:y 的坐标减小,想下移动:y 的坐标增大;


这一讲我们就讲这些,下一讲我们将开始Android中关于游戏的几个重类,以及实现文字、图像和背景的绘制,最后让他们动起来。

敬请期待吧!!!

 

相关文章:

  • 应用开发框架之——插件、包
  • SQL SERVER中强制类型转换cast和convert的区别
  • ASP.NET MVC中检测浏览器版本并提示下载更新
  • firdac支持的序列和还原格式
  • Online, Cheap -- and Elite
  • python datetime笔记
  • exceptions.IOError: decoder jpeg not available
  • 【中文分词系列】 4. 基于双向LSTM的seq2seq字标注
  • 正则指引
  • 一些专业术语的总结
  • 条件变脸pthread_cond_signal丢失问题
  • 必须掌握的8个dos命令
  • libcurl多线程超时设置不安全
  • 可视化库-Matplotlib-直方图(第四天)
  • 微信支付JSAPI,实测!终极方案
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • iOS 系统授权开发
  • Java新版本的开发已正式进入轨道,版本号18.3
  • opencv python Meanshift 和 Camshift
  • python 装饰器(一)
  • React Native移动开发实战-3-实现页面间的数据传递
  • SpingCloudBus整合RabbitMQ
  • SpringBoot几种定时任务的实现方式
  • Webpack 4x 之路 ( 四 )
  • 官方解决所有 npm 全局安装权限问题
  • 和 || 运算
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 试着探索高并发下的系统架构面貌
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 06-01 点餐小程序前台界面搭建
  • Spring第一个helloWorld
  • 大数据全解:定义、价值及挑战
  • #define
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (四) 虚拟摄像头vivi体验
  • (一)u-boot-nand.bin的下载
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 设计一套高性能的弱事件机制
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET性能优化(文摘)
  • @Resource和@Autowired的区别
  • @selector(..)警告提示
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例