`

android游戏开发学习

阅读更多
相关资源
2D中如何判断一点在另一个点的那个方位:
http://blog.csdn.net/rabbit729/article/details/4424929
游戏开发书籍推荐:
http://rightmost.blog.163.com/blog/static/18058539920112223202311/
http://blog.csdn.net/hsz8250/article/details/639771
地图绘制算法:
http://bbs.chinaunix.net/viewthread.php?tid=1669931
如何成为android游戏程序员:
http://www.microdu.com/thread-3235-1-1.html
silverlight c#游戏开发相关文章:
http://www.silverlightchina.net/html/zhuantixilie/game/
游戏引擎剖析:
http://blog.csdn.net/xiaominghimi/article/details/6556289

游戏开发常用工具
游戏图片提取工具、png压缩、音乐压缩工具:
http://www.silverlightchina.net/html/zhuantixilie/game/2010/0520/1148.html
cocos2d游戏开发,常用工具集合:
http://www.cocoachina.com/bbs/read.php?tid-68951.html


游戏开发库、框架、引擎
android中常见游戏引擎:
http://my.oschina.net/ahuaahua/blog/16930
libgdx:
项目地址:http://code.google.com/p/libgdx/
作者博客:http://www.badlogicgames.com/wordpress/
libgdx官方指南:http://code.google.com/p/libgdx/wiki/TableOfContents?tm=6
强烈建议看看begin android games,因为那本书的作者就是libgdx的开发者,那本书基本是从基础开始讲述了libgdx的一个雏形的开发。
libgdx入门:http://www.oschina.net/question/12_15850
libgdx学习笔记:http://www.cnblogs.com/tianjian/category/315324.html

LGame游戏引擎作者blog(国人):
http://blog.csdn.net/cping1982?viewmode=contents

min3d:
http://code.google.com/p/min3d/


游戏开发网站、论坛
open gl官方网站
http://www.khronos.org/opengles/
最经典的Nehe 学习网站
http://nehe.gamedev.net/
中文的Nehe学习网站
http://www.owlei.com/DancingWind/
GLUT 的下载网站
http://www.opengl.org/resources/libraries/glut/
老牌的游戏开发网站
http://www.gamedev.net
面向工业的老牌游戏开发网站
http://www.gamasutra.com
游戏开发wiki
http://wiki.gamedev.net
经典代码档案网站
http://www.flipcode.com/archives/
java游戏开发的首选网站:
http://www.java-gaming.org


open gl
Android OpenGL ES 分析与实践系列:
http://blog.163.com/gobby_1110/blog/static/29281715201132033017409/
OpengGL ES教程:
http://www.zeuscmd.com/tutorials/opengles/index.php

什么是open gl:http://www.kuqin.com/baike/20081006/21130.html

open gl、egl简介?
open gl是一套与平台无关的图形api,但它只提供了图形渲染功能,没有与宿主系统交互的功能。egl就是对open gl的一个扩展,使之具有与宿主系统交互等的功能。其它的还包括:wgl-window平台上的opengl扩展,xgl-基于xwindow的平台的opengl扩展,agl-apple mac平台的opengl扩展

open gl es基本图形的绘制
open gl es初始化部分
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
	initFloatGL();
	initXXX // XXX为要绘制的图形
}

private void initFloatGL() {
	// 定义画面大小
	gl.glViewport(0, 0, mWidth, mHeight);
	// 设置操作的变换矩阵
	gl.glMatrixMode(GL10.GL_PROJECTION);
	gl.glLoadIdentity();
	// 标准化坐标系统
	gl.glOrthof(0, mWidth, 0, mHeight, 1, -1);
	// 保存清屏颜色(黑色)
	// gl.glClearColor(1.0F, 1.0F, 1.0F, 1.0F);
	// 设置绘制默认颜色(红色)
	gl.glColor4f(1.0F, 0.0F, 0.0F, 1.0F);
	// 启用opengl某些功能
	gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
}


绘制三角形
private void initTriangles() {
	// 创建绘制三角形要用的点数据
	int pointNum = 6;
	ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);
	byteBuffer.order(ByteOrder.nativeOrder());
	byteBuffer.clear();
	FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
	floatBuffer.put(new float[] {
			// triangle 1
			0.0F, 0.0F, // p1
			50.0F, 0.0F, // p2
			25.0F, 50.0F, // p3
			// triangle 2
			0.0F, 60.0F, // p1
			50.0F, 60.0F, // p2
			25.0F, 110.0F // p3
	});
	floatBuffer.flip();

	// 保存要用的点
	gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);
	System.out.println("initTriangles");
}

绘制三角行带
private void initTriangleStrip() {
	// 创建绘制三角形带要用的点
	int pointNum = 5; // 3 triangles
	ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);
	byteBuffer.order(ByteOrder.nativeOrder());
	byteBuffer.clear();
	FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
	floatBuffer.put(new float[] {
		60.0F, 0.0F, // p1
		110.0F, 0.0F, // p2
		85.0F, 100.0F, // p3
		135.0F, 100.0F, // p4
		180.0F, 0.0F, // p5
	});
	floatBuffer.flip();
	
	// 保存要用的点
	gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);
}

绘制三角扇形
private void initTriangleFan() {
	// 创建绘制三角扇形要用的点
	int pointNum = 5; // 4 triangles
	ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);
	byteBuffer.order(ByteOrder.nativeOrder());
	byteBuffer.clear();
	FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
	floatBuffer.put(new float[] {
		50.0F, 50.0F, // center point
		0.0F, 100.0F, // p2
		30.0F, 120.0F, // p3
		60.0F, 120.0F, // p4
		90.0F, 100.0F // p5
	});
	floatBuffer.flip();
	
	// 保存要用的点
	gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);
}

绘制点
private void initPoints() {
	// 创建绘制点要用的点数据(x, y and four points and 4 bytes a float)
	ByteBuffer byteBuffer = ByteBuffer.allocateDirect(2 * 4 * 4);
	byteBuffer.order(ByteOrder.nativeOrder());
	byteBuffer.clear();
	FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
	floatBuffer.put(new float[] {
		20.0F, 20.0F, // p1
		20.0F, 21.0F, // p2
		20.0F, 22.0F, // p3
		22.0F, 20.0F // p4
	});
	floatBuffer.flip();
	
	// 保存要用的点
	gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);
}

绘制线段
private void initLines() {
	// 创建绘制线段要用的点
	int pointNum = 6; // 3 lines
	ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);
	byteBuffer.order(ByteOrder.nativeOrder());
	byteBuffer.clear();
	FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
	floatBuffer.put(new float[] {
		20.0F, 20.0F, 100.0F, 200.0F, // line1
		50.0F, 50.0F, 300.0F, 100.0F, // line2
		200.0F, 200.0F, 200.0F, 20.0F // line3
	});
	floatBuffer.flip();
	
	// 保存要用的点
	gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);
}

绘制线条
private void initLineStrip() {
	// 创建绘制线条要用的点
	int pointNum = 4; // 3 lines
	ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);
	byteBuffer.order(ByteOrder.nativeOrder());
	byteBuffer.clear();
	FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
	floatBuffer.put(new float[] {
		20.0F, 20.0F, // p1
		100.0F, 200.0F, // p2
		200.0F, 200.0F, // p3
		200.0F, 20.0F // p4
	});
	floatBuffer.flip();
	
	// 保存要用的点
	gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);
}

绘制环形线路
private void initLineLoop() {
	// 创建绘制环形线路要用的点
	int pointNum = 4;
	ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);
	byteBuffer.order(ByteOrder.nativeOrder());
	byteBuffer.clear();
	FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
	floatBuffer.put(new float[] {
		20.0F, 20.0F, // p1
		100.0F, 200.0F, // p2
		200.0F, 200.0F, // p3
		200.0F, 20.0F // p4
	});
	floatBuffer.flip();
	
	// 保存要用的点
	gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);
}


实际图形的绘制
public void onDrawFrame(GL10 gl) {
	gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
	
	gl.glDrawArrays(具体的形状);
	
}

// 三角形
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 6);
// 三角形带
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 5);
// 三角扇形
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 5);
// 点
gl.glDrawArrays(GL10.GL_POINTS, 0, 4);
// 线段
gl.glDrawArrays(GL10.GL_LINES, 0, 6);
// 线条
gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 4);
// 环形线路
gl.glDrawArrays(GL10.GL_LINE_LOOP, 0, 4);



open gl es使用过程中遇到的问题及解决
1. 贴图(texture)无法显示,我遇到的主要原因主要有以下几个:
1. 图片的宽或高不是2的n次方
2. 图片放在了drawable, drawable-hdpi等会被android缩放的目录(这样在不同dpi的机器上时,图片可能就被拉升为宽或高不是2的n次方了),所以要将图片放在drawable-nodpi或assets中
3. open gl es对图片大小有一定的限制,可以尝试多换几个大小试试。1024x1024, 512x512, 128x256在测试时是可以的
4. 代码设置不正确(下面是一段可用代码,中间用// ********************说明了一些需要注意的地方)
// 读取间隔(三角形2个坐标 + 贴图两个坐标)
int strideBytes = (2 + 2) * 4;

ByteBuffer byteBuffer = ByteBuffer.allocateDirect(3 * strideBytes); // 总共3个点
byteBuffer.order(ByteOrder.nativeOrder());

// 创建要用的顶点(贴图和要绘制的三角形的)
FloatBuffer mVertexs = byteBuffer.asFloatBuffer();
mVertexs.put(new float[] { 
	100.0F, 100.0F, /* trangle vertex 1 */
	0.0F, 1.0F, /* texture vertex 1 */
	
	228.0F, 100.0F, /* trangle vertex 2 */
	1.0F, 1.0F, /* texture vertex 2 */
	
	228.0F, 228.0F, /* trangle vertex 3 */
	1.0F, 0.0F, /* texture vertex 3 */
});
mVertexs.flip();

// 初始化并设置贴图
int[] texIds = new int[1];
gl.glGenTextures(1, texIds, 0);

// 设置要操作的贴图
gl.glBindTexture(GL10.GL_TEXTURE_2D, texIds[0]);
// 上传图片至open gl
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, Assets.sGL, 0);
// ********************
// 设置图片参数(这个如果不设置,可能在模拟器上正常,在真机上贴图会无法显示)
// ********************
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
// 解绑操作的贴图
gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);

// open gl初始化代码
// 设置画面大小
gl.glViewport(0, 0, 480, 320);
// 设置操作矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
// 标准化坐标系统
gl.glOrthof(0, 480, 0, 320, 1, -1);

// 设置清屏颜色(白色)
gl.glClearColor(1.0F, 1.0F, 1.0F, 1.0F);
// 设置绘制默认颜色(红色)
gl.glColor4f(1.0F, 0.0F, 0.0F, 1.0F);

// ********************
// 启用open gl其他功能(一定要开启此功能)
// ********************
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glBindTexture(GL10.GL_TEXTURE_2D, mTexIds[0]);

// 启用open gl顶点相关功能
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

// 保存要读取的点的数据
mVertexs.position(0);
gl.glVertexPointer(2, GL10.GL_FLOAT, strideBytes, mVertexs);
mVertexs.position(2);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, strideBytes, mVertexs);


// 清屏
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
// 绘制三角形,并以设置的贴图填充
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);

********************************************************************************************************************************************
********************************************************************************************************************************************
photoshop相关
几种png格式的区别
PNG图片格式现在包含三种类型:
1.PNG8
2.PNG24
3.PNG32
如果你经常使用Photoshop,那你这里就会问了:到底PNG32是个什么东西。基本上PNG32就是PNG24,但是附带了全alpha通道。就是说每个像素上不仅存储了24位真色彩信息还存储了8位的alpha通道信息,就如同GIF能存储透明和不透明信息一样。当我们把图片放到不太搭配的背景上的时候,透明PNG图片的边缘会显示得更加平滑。
当然,我也知道你的想法,“但是Photoshop也能生成带透明通道的PNG图片!”我也知道,它只是表面上这么说是PNG24,让我也产生困惑了。
作为一个伤感的Fireworks倡导者,我只使用PNG32支持附带alpha通道的真色彩图片。不管怎样,如果你习惯使用Photoshop,你就应该知道,Photoshop在“存储为WEB格式”中只提供PNG8和PNG24两种PNG格式。
我敢肯定你经常会勾选“支持透明”选项,以获得带有透明度的PNG图片,但是这样你就获取了一张PNG32图片。——Photoshop只是觉得把PNG32这个名称给隐藏掉了。

png保存时的交错选项

交错:就是指浏览器下载它的时候隔行下载,这样下载一张图只用一半的时间就可以看到它的样子,只不过只是隔行的图,然后它再下载另一般,这样可以减少你等待看它的时间.
无:就是没有优化


alpha通道,蒙板,路径
通道只有两个功能就是保存图像选区和颜色信息。例如RGB模式下通道里就有红绿蓝三个颜色的信息,你可以实验一下如果你画一个纯红色的东西,那么红色通道里就显示白色,绿蓝通道里就显示为黑色,意思是说红色是满的,绿和蓝是完全没有的。因为通道是用黑白灰来记录颜色信息的。
至于图象选区,你在通道栏里点下面的新建通道,他出来的就是个ALPHA1通道。如果在此通道画白色,那么白色部分就是被记录下的选区。
至于蒙板,如果给图层添加个蒙板,用处就是为了让此图层显示某些地方隐藏某些地方。白色代表显示黑色代表隐藏。你可以看到在通道里面,也会有个ALPHA通道但它名字叫图层1蒙板。所以蒙板其实就是一个ALPHA通道。
  • 大小: 128.7 KB
  • 大小: 70.8 KB
  • 大小: 269.9 KB
  • 大小: 10.6 KB
分享到:
评论

相关推荐

    Android游戏与应用开发最佳学习路线图

    ### Android游戏与应用开发最佳学习路线图 #### 一、路线图概览 本学习路线图旨在为初学者提供一个全面且系统的学习路径,帮助其掌握Android应用与游戏开发的核心技能。通过本路线图的学习,学员将能够从零开始...

    Android 游戏与应用开发最佳学习路线图 word版

    在Android游戏与应用开发的学习过程中,有一条清晰的路径可以帮助初学者逐步掌握所需技能。以下是一份详尽的学习路线图,涵盖了从基础到高级的各个关键知识点。 首先,要掌握核心Java,这是Android开发的基础。这...

    Android -- 游戏开发视频+源码

    总的来说,这个资源包是一个全面的Android游戏开发学习资源,它将理论与实践相结合,既包含了基础的教学材料,也有实战项目的经验分享,对于有志于在Android平台上开发游戏的人来说,是一份不可多得的学习资料。...

    android游戏开发入门

    在Android游戏开发领域,入门是每个开发者都需要经历的阶段。Android平台因其开源、广泛的设备覆盖以及丰富的...在jb51.net这样的网站上,你可以找到很多相关的学习资源和教程,进一步加深对Android游戏开发的理解。

    Android 游戏开发入门随书光盘的代码

    在Android游戏开发的世界里,初学者常常需要一个良好的起点来理解和掌握这个领域的基本概念和技术。"Android 游戏开发入门随书光盘的代码"提供了一个理想的资源库,帮助新手们快速进入游戏开发的殿堂。这个压缩包...

    Android游戏开发方向游戏全程实战开发(飞行射击类游戏+RPG游戏开发)

    在Android游戏开发领域,尤其是针对飞行射击类游戏和角色扮演游戏(RPG)的全程实战开发,涵盖了一系列的技术栈和流程。下面将详细讲解这个过程中的关键知识点。 首先,Android游戏开发的基础是Java或Kotlin语言,...

    Android游戏开发PDF

    本文将深入探讨Android游戏开发的基础知识,帮助初学者入门并理解这一领域的核心概念。 一、Android游戏开发环境搭建 要开始Android游戏开发,首先需要安装Android Studio,它是Google官方提供的集成开发环境(IDE...

    精通Android游戏开发pdf

    在Android平台上进行游戏开发是一项富有挑战且充满机遇的工作。随着移动设备的普及,Android...通过深入学习以上各个知识点,并结合实际项目实践,你将能够逐步精通Android游戏开发,创造出引人入胜的移动游戏作品。

    精通Android游戏开发

    通过以上章节的学习和实践,读者将能够掌握从基础到高级的Android游戏开发技能,包括Java编程、OpenGL图形渲染、本地代码编写等多个方面。无论是初学者还是有经验的开发者,都能够从中获得宝贵的知识和经验。

    android游戏开发毕业论文

    《基于Android的解谜游戏开发》是一篇关于本科毕业设计的论文,主要探讨了在Android平台上开发解谜游戏...通过这篇论文,读者可以了解到Android游戏开发的基本流程和技术细节,为相关领域的学习和实践提供了宝贵参考。

    android游戏开发大全 ppt 课件

    这份"Android游戏开发大全PPT课件"是专为那些想要深入学习Android游戏开发的人员准备的宝贵资源,涵盖了从基础知识到高级技巧的全方位教程。 首先,Android开发的基础在于对Java或Kotlin语言的理解。Java作为...

    Android游戏开发大全.rar

    "Android游戏开发大全"这个资源可能包含了一份全面的指南,帮助开发者深入理解和掌握Android游戏开发的核心概念和技术。以下是对Android游戏开发的一些关键知识点的详细解释: 1. **Android SDK**: Android ...

    android游戏开发示例

    在Android游戏开发领域,开发者需要掌握一系列技术和工具来创建引人入胜的互动体验。"android游戏开发示例"这...通过学习和实践这些示例,开发者能够逐步构建自己的游戏项目,并提升在Android游戏开发领域的专业技能。

    6个android原生开发小游戏

    以下6个游戏项目提供了丰富的学习资源,涵盖了从基础到进阶的Android游戏开发技术: 1. **Android 美女拼图游戏**:这是一个典型的图像处理和逻辑编程的游戏。开发者可能使用了Android的Bitmap类来处理图片,通过...

    Android高级应用源码-Android 游戏开发入门随书光盘的代码.zip

    《Android高级应用源码-Android 游戏开发入门随书光盘的代码.zip》这个压缩包文件包含了Android游戏开发的初级到高级的应用源码,是学习Android游戏编程的理想参考资料。通过对这些源码的学习和分析,开发者可以深入...

    精通Android游戏开发-源代码

    通过学习这些源代码,开发者不仅可以掌握Android游戏开发的基础,还能深入了解游戏设计的各个方面,包括图形渲染、物理模拟、游戏逻辑、资源管理等。这将为他们创建自己的Android游戏奠定坚实的基础。同时,源代码的...

    android游戏开发教程

    通过本教程的学习,读者不仅能够建立起一套完整的Android游戏开发环境,还能掌握从零开始构建Android游戏的基本技能。随着对Android平台的深入了解,开发者还能够进一步探索更高级的功能和优化技术,如使用OpenGL ES...

    android游戏开发byExample例子

    在Android游戏开发领域,"Android Game by ...通过分析"Tappy Defender"项目,读者不仅可以学习到Android游戏开发的基础知识,还能实践如何将理论应用于实际项目,这对于提升编程技能和理解游戏开发流程非常有帮助。

    Android游戏开发经典书籍(英文)

    根据提供的文件信息,我们可以总结出以下关于Android游戏开发的相关知识点: ### 一、书籍基本信息 - **书名**:《Beginning Android Games》 - **作者**:Mario Zechner - **出版年份**:2011年 - **出版社**:...

    android游戏开发实战宝典与3D游戏开发教程.7z

    《Android游戏开发实战宝典与3D游戏开发教程》是一份综合性的学习资源,涵盖了Android平台上游戏开发的多个重要方面。这份压缩包包含了两部分核心内容:《ANDROID_2游戏开发实战宝典》和《Android_3D游戏开发教程》...

Global site tag (gtag.js) - Google Analytics