现在的位置: 首页 > 综合 > 正文

android游戏开发学习 博客分类: android

2018年03月19日 ⁄ 综合 ⁄ 共 10913字 ⁄ 字号 评论关闭

相关资源 (转自: http://yuanzhifei89.iteye.com/blog/1166835
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初始化部分 

Java代码  收藏代码
  1. public void onSurfaceCreated(GL10 gl, EGLConfig config) {  
  2.     initFloatGL();  
  3.     initXXX // XXX为要绘制的图形  
  4. }  
  5.   
  6. private void initFloatGL() {  
  7.     // 定义画面大小  
  8.     gl.glViewport(00, mWidth, mHeight);  
  9.     // 设置操作的变换矩阵  
  10.     gl.glMatrixMode(GL10.GL_PROJECTION);  
  11.     gl.glLoadIdentity();  
  12.     // 标准化坐标系统  
  13.     gl.glOrthof(0, mWidth, 0, mHeight, 1, -1);  
  14.     // 保存清屏颜色(黑色)  
  15.     // gl.glClearColor(1.0F, 1.0F, 1.0F, 1.0F);  
  16.     // 设置绘制默认颜色(红色)  
  17.     gl.glColor4f(1.0F, 0.0F, 0.0F, 1.0F);  
  18.     // 启用opengl某些功能  
  19.     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);  
  20. }  



绘制三角形 

Java代码  收藏代码
  1. private void initTriangles() {  
  2.     // 创建绘制三角形要用的点数据  
  3.     int pointNum = 6;  
  4.     ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);  
  5.     byteBuffer.order(ByteOrder.nativeOrder());  
  6.     byteBuffer.clear();  
  7.     FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();  
  8.     floatBuffer.put(new float[] {  
  9.             // triangle 1  
  10.             0.0F, 0.0F, // p1  
  11.             50.0F, 0.0F, // p2  
  12.             25.0F, 50.0F, // p3  
  13.             // triangle 2  
  14.             0.0F, 60.0F, // p1  
  15.             50.0F, 60.0F, // p2  
  16.             25.0F, 110.0F // p3  
  17.     });  
  18.     floatBuffer.flip();  
  19.   
  20.     // 保存要用的点  
  21.     gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);  
  22.     System.out.println("initTriangles");  
  23. }  


绘制三角行带 

Java代码  收藏代码
  1. private void initTriangleStrip() {  
  2.     // 创建绘制三角形带要用的点  
  3.     int pointNum = 5// 3 triangles  
  4.     ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);  
  5.     byteBuffer.order(ByteOrder.nativeOrder());  
  6.     byteBuffer.clear();  
  7.     FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();  
  8.     floatBuffer.put(new float[] {  
  9.         60.0F, 0.0F, // p1  
  10.         110.0F, 0.0F, // p2  
  11.         85.0F, 100.0F, // p3  
  12.         135.0F, 100.0F, // p4  
  13.         180.0F, 0.0F, // p5  
  14.     });  
  15.     floatBuffer.flip();  
  16.       
  17.     // 保存要用的点  
  18.     gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);  
  19. }  


绘制三角扇形 

Java代码  收藏代码
  1. private void initTriangleFan() {  
  2.     // 创建绘制三角扇形要用的点  
  3.     int pointNum = 5// 4 triangles  
  4.     ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);  
  5.     byteBuffer.order(ByteOrder.nativeOrder());  
  6.     byteBuffer.clear();  
  7.     FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();  
  8.     floatBuffer.put(new float[] {  
  9.         50.0F, 50.0F, // center point  
  10.         0.0F, 100.0F, // p2  
  11.         30.0F, 120.0F, // p3  
  12.         60.0F, 120.0F, // p4  
  13.         90.0F, 100.0F // p5  
  14.     });  
  15.     floatBuffer.flip();  
  16.       
  17.     // 保存要用的点  
  18.     gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);  
  19. }  


绘制点 

Java代码  收藏代码
  1. private void initPoints() {  
  2.     // 创建绘制点要用的点数据(x, y and four points and 4 bytes a float)  
  3.     ByteBuffer byteBuffer = ByteBuffer.allocateDirect(2 * 4 * 4);  
  4.     byteBuffer.order(ByteOrder.nativeOrder());  
  5.     byteBuffer.clear();  
  6.     FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();  
  7.     floatBuffer.put(new float[] {  
  8.         20.0F, 20.0F, // p1  
  9.         20.0F, 21.0F, // p2  
  10.         20.0F, 22.0F, // p3  
  11.         22.0F, 20.0F // p4  
  12.     });  
  13.     floatBuffer.flip();  
  14.       
  15.     // 保存要用的点  
  16.     gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);  
  17. }  


绘制线段 

Java代码  收藏代码
  1. private void initLines() {  
  2.     // 创建绘制线段要用的点  
  3.     int pointNum = 6// 3 lines  
  4.     ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);  
  5.     byteBuffer.order(ByteOrder.nativeOrder());  
  6.     byteBuffer.clear();  
  7.     FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();  
  8.     floatBuffer.put(new float[] {  
  9.         20.0F, 20.0F, 100.0F, 200.0F, // line1  
  10.         50.0F, 50.0F, 300.0F, 100.0F, // line2  
  11.         200.0F, 200.0F, 200.0F, 20.0F // line3  
  12.     });  
  13.     floatBuffer.flip();  
  14.       
  15.     // 保存要用的点  
  16.     gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);  
  17. }  


绘制线条 

Java代码  收藏代码
  1. private void initLineStrip() {  
  2.     // 创建绘制线条要用的点  
  3.     int pointNum = 4// 3 lines  
  4.     ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);  
  5.     byteBuffer.order(ByteOrder.nativeOrder());  
  6.     byteBuffer.clear();  
  7.     FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();  
  8.     floatBuffer.put(new float[] {  
  9.         20.0F, 20.0F, // p1  
  10.         100.0F, 200.0F, // p2  
  11.         200.0F, 200.0F, // p3  
  12.         200.0F, 20.0F // p4  
  13.     });  
  14.     floatBuffer.flip();  
  15.       
  16.     // 保存要用的点  
  17.     gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);  
  18. }  


绘制环形线路 

Java代码  收藏代码
  1. private void initLineLoop() {  
  2.     // 创建绘制环形线路要用的点  
  3.     int pointNum = 4;  
  4.     ByteBuffer byteBuffer = ByteBuffer.allocateDirect(pointNum * 2 * 4);  
  5.     byteBuffer.order(ByteOrder.nativeOrder());  
  6.     byteBuffer.clear();  
  7.     FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();  
  8.     floatBuffer.put(new float[] {  
  9.         20.0F, 20.0F, // p1  
  10.         100.0F, 200.0F, // p2  
  11.         200.0F, 200.0F, // p3  
  12.         200.0F, 20.0F // p4  
  13.     });  
  14.     floatBuffer.flip();  
  15.       
  16.     // 保存要用的点  
  17.     gl.glVertexPointer(2, GL10.GL_FLOAT, 0, floatBuffer);  
  18. }  



实际图形的绘制 

Java代码  收藏代码
  1. public void onDrawFrame(GL10 gl) {  
  2.     gl.glClear(GL10.GL_COLOR_BUFFER_BIT);  
  3.       
  4.     gl.glDrawArrays(具体的形状);  
  5.       
  6. }  
  7.   
  8. // 三角形  
  9. gl.glDrawArrays(GL10.GL_TRIANGLES, 06);  
  10. // 三角形带  
  11. gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 05);  
  12. // 三角扇形  
  13. gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 05);  
  14. // 点  
  15. gl.glDrawArrays(GL10.GL_POINTS, 04);  
  16. // 线段  
  17. gl.glDrawArrays(GL10.GL_LINES, 06);  
  18. // 线条  
  19. gl.glDrawArrays(GL10.GL_LINE_STRIP, 04);  
  20. // 环形线路  
  21. gl.glDrawArrays(GL10.GL_LINE_LOOP, 04);  




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. 代码设置不正确(下面是一段可用代码,中间用// ********************说明了一些需要注意的地方) 

Java代码  收藏代码
  1. // 读取间隔(三角形2个坐标 + 贴图两个坐标)  
  2. int strideBytes = (2 + 2) * 4;  
  3.   
  4. ByteBuffer byteBuffer = ByteBuffer.allocateDirect(3 * strideBytes); // 总共3个点  
  5. byteBuffer.order(ByteOrder.nativeOrder());  
  6.   
  7. // 创建要用的顶点(贴图和要绘制的三角形的)  
  8. FloatBuffer mVertexs = byteBuffer.asFloatBuffer();  
  9. mVertexs.put(new float[] {   
  10.     100.0F, 100.0F, /* trangle vertex 1 */  
  11.     0.0F, 1.0F, /* texture vertex 1 */  
  12.       
  13.     228.0F, 100.0F, /* trangle vertex 2 */  
  14.     1.0F, 1.0F, /* texture vertex 2 */  
  15.       
  16.     228.0F, 228.0F, /* trangle vertex 3 */  
  17.     1.0F, 0.0F, /* texture vertex 3 */  
  18. });  
  19. mVertexs.flip();  
  20.   
  21. // 初始化并设置贴图  
  22. int[] texIds = new int[1];  
  23. gl.glGenTextures(1, texIds, 0);  
  24.   
  25. // 设置要操作的贴图  
  26. gl.glBindTexture(GL10.GL_TEXTURE_2D, texIds[0]);  
  27. // 上传图片至open gl  
  28. GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, Assets.sGL, 0);  
  29. // ********************  
  30. // 设置图片参数(这个如果不设置,可能在模拟器上正常,在真机上贴图会无法显示)  
  31. // ********************  
  32. gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);  
  33. gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);  
  34. // 解绑操作的贴图  
  35. gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);  
  36.   
  37. // open gl初始化代码  
  38. // 设置画面大小  
  39. gl.glViewport(00480320);  
  40. // 设置操作矩阵  
  41. gl.glMatrixMode(GL10.GL_PROJECTION);  
  42. gl.glLoadIdentity();  
  43. // 标准化坐标系统  
  44. gl.glOrthof(048003201, -1);  
  45.   
  46. // 设置清屏颜色(白色)  
  47. gl.glClearColor(1.0F, 1.0F, 1.0F, 1.0F);  
  48. // 设置绘制默认颜色(红色)  
  49. gl.glColor4f(1.0F, 0.0F, 0.0F, 1.0F);  
  50.   
  51. // ********************  
  52. // 启用open gl其他功能(一定要开启此功能)  
  53. // ********************  
  54. gl.glEnable(GL10.GL_TEXTURE_2D);  
  55. gl.glBindTexture(GL10.GL_TEXTURE_2D, mTexIds[0]);  
  56.   
  57. // 启用open gl顶点相关功能  
  58. gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);  
  59. gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);  
  60.   
  61. // 保存要读取的点的数据  
  62. mVertexs.position(0);  
  63. gl.glVertexPointer(2, GL10.GL_FLOAT, strideBytes, mVertexs);  
  64. mVertexs.position(2);  
  65. gl.glTexCoordPointer(2, GL10.GL_FLOAT, strideBytes, mVertexs);  
  66.   
  67.   
  68. // 清屏  
  69. gl.glClear(GL10.GL_COLOR_BUFFER_BIT);  
  70. // 绘制三角形,并以设置的贴图填充  
  71. gl.glDrawArrays(GL10.GL_TRIANGLES, 03);  


********************************************************************************************************************************************
********************************************************************************************************************************************
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通道。

抱歉!评论已关闭.