ImageVerifierCode 换一换
格式:DOCX , 页数:104 ,大小:77.46KB ,
资源ID:5427113      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5427113.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(03OPhone平台2D游戏引擎实现图形图像系统.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

03OPhone平台2D游戏引擎实现图形图像系统.docx

1、03OPhone平台2D游戏引擎实现图形图像系统上一篇文章中我们介绍了引擎的场景、图层部分,我们已经拥有了一个用来代表一个游戏界面的容器,现在就需要向这个容器中加入各种元素,这些元素就是我们上一节给大家介绍的节点,我们前面看到在Node类中定义了一些接口,一直没有使用,本节我们将使用这一部分接口来完成图形图像的渲染,比如一个节点是一张背景图片,那么我们就需要将图片按照Opengl纹理映射的方式来进行贴图操作。下面先给大家介绍一下本节的主要内容。 引擎工具包:包括常用的逻辑操作和资源的装载等等。 2D纹理贴图:封装实现一个2D的纹理贴图对象,方便引擎中的贴图操作。 图片集:将很多图片放到一张大图

2、片上,使用时进行分割,原因稍后解析。 贴图管理器:负责管理引擎中所有贴图的缓冲,以及释放,重新载入等逻辑。 贴图元素:在Node的基础上实现2D纹理对象,贴图帧,精灵等。引擎工具包引擎一般都包含一个工具包,通常用来处理一些简单的逻辑,比如一些数学计算,角度的换转等,这里我们还包括了资源的装载于解析,包括从res文件夹下面获取资源,以及对一个特殊资源(TGA)的解析和使用。下面我们将分别稍稍他们的实现。常用工具包常用工具包就是对一些常用的操作进行了封装,所以大家一看就能明白,我们也加入了注解,这里就不在多浪费时间了。具体实现入代码清单3-1所示。代码清单3-1:Utilities实现view p

3、laincopy to clipboardprint?1. publicclassUtilities 2. privatestaticfinalRandomsRandom=newRandom(); 3. /产生指定的随机数 4. publicstaticfloatrandMinusOneToOne() 5. return(float)Math.random()*2.0F-1.0F; 6. 7. publicstaticfloatrandZeroToOne() 8. return(float)Math.random(); 9. 10. publicstaticintrand(intmax) 11

4、. returnsRandom.nextInt(max); 12. 13. /角度与弧度之间的转换 14. publicstaticfloatd2r(floatangle) 15. returnangle/180.0F*3.141593F; 16. 17. publicstaticfloatr2d(floatangle) 18. returnangle/3.141593F*180.0F; 19. 20. /将byte数组转换成UTF8字符串 21. publicstaticStringgetUTF8String(byteb) 22. if(b=null) 23. return; 24. ret

5、urngetUTF8String(b,0,b.length); 25. 26. publicstaticStringgetUTF8String(byteb,intstart,intlength) 27. if(b=null) 28. return; 29. try 30. returnnewString(b,start,length,UTF-8); 31. catch(UnsupportedEncodingExceptione) 32. 33. return; 34. 35. /指数 36. publicstaticintgetClosest2Exp(intnum) 37. if(num!=1

6、)&(num&num-1)!=0) 38. inti=1; 39. while(i-1;-y) 105. for(intx=0;x24&0xFF; 108. intred=pix16&0xFF; 109. intgreen=pix8&0xFF; 110. intblue=pix&0xFF; 111. ib.put(red24|green16|blue8|alpha); 112. 113. 114. bb.position(0); 115. returnbb; 116. 117. /交换数据 118. publicstaticvoidswap(floatv,intindex1,intindex2

7、) 119. floattmp=vindex1; 120. vindex1=vindex2; 121. vindex2=tmp; 122. 123. /从Raw中读取一个资源文件转换为byte数组 124. publicstaticbytedataOfRawResource(Contextcontext,intid) 125. InputStreamin=null; 126. bytebytes=(byte)null; 127. try 128. in=context.getResources().openRawResource(id); 129. bytebuf=newbyte1024; 1

8、30. ByteArrayOutputStreamout=newByteArrayOutputStream(); 131. for(inti=0;i!=-1;i=in.read(buf) 132. out.write(buf,0,i); 133. 134. bytes=out.toByteArray(); 135. out.flush(); 136. out.close(); 137. catch(Throwablee) 138. Log.e(Engine,Cantreadtherawresource:+id); 139. finally 140. try 141. if(in!=null)

9、142. in.close(); 143. catch(IOExceptionlocalIOException1) 144. 145. 146. returnbytes; 147. 148. public class Utilities private static final Random sRandom = new Random(); /产生指定的随机数 public static float randMinusOneToOne() return (float) Math.random() * 2.0F - 1.0F; public static float randZeroToOne()

10、 return (float) Math.random(); public static int rand(int max) return sRandom.nextInt(max); /角度与弧度之间的转换 public static float d2r(float angle) return angle / 180.0F * 3.141593F; public static float r2d(float angle) return angle / 3.141593F * 180.0F; /将byte数组转换成UTF8字符串 public static String getUTF8Strin

11、g(byte b) if (b = null) return ; return getUTF8String(b, 0, b.length); public static String getUTF8String(byte b, int start, int length) if (b = null) return ; try return new String(b, start, length, UTF-8); catch (UnsupportedEncodingException e) return ; /指数 public static int getClosest2Exp(int num

12、) if (num != 1) & (num & num - 1) != 0) int i = 1; while (i num) i *= 2; num = i; return num; /计算文字的尺寸 public static YFSSize calculateTextSize(String text, String fontname, float fontSize) Typeface typeface = Typeface.create(fontname, 0); Paint paint = new Paint(); paint.setTypeface(typeface); paint

13、.setTextSize(fontSize); paint.setAntiAlias(true); int ascent = (int) Math.ceil(-paint.ascent(); int descent = (int) Math.ceil(paint.descent(); int measuredTextWidth = (int) Math.ceil(paint.measureText(text); return YFSSize.make(measuredTextWidth, ascent + descent); /创建一个文字Label转换为Bitmap public stati

14、c Bitmap createLabelBitmap(String text, YFSSize dimensions, Label.TextAlignment alignment, String fontname, float fontSize) Typeface typeface = Typeface.create(fontname, 0); Paint paint = new Paint(); paint.setTypeface(typeface); paint.setTextSize(fontSize); paint.setAntiAlias(true); paint.setColor(

15、-1); int ascent = 0; int descent = 0; int measuredTextWidth = 0; ascent = (int) Math.ceil(-paint.ascent(); descent = (int) Math.ceil(paint.descent(); measuredTextWidth = (int) Math.ceil(paint.measureText(text); int textWidth = measuredTextWidth; int textHeight = ascent + descent; if (dimensions.widt

16、h = 0.0F) | (dimensions.height = 0.0F) YFSSize size = calculateTextSize(text, fontname, fontSize); dimensions.width = size.width; dimensions.height = size.height; int width = getClosest2Exp(int) dimensions.width); int height = getClosest2Exp(int) dimensions.height); Bitmap.Config config = Bitmap.Con

17、fig.ARGB_8888; Bitmap bitmap = Bitmap.createBitmap(width, height, config); Canvas canvas = new Canvas(bitmap); bitmap.eraseColor(0); int y = ascent + (int) dimensions.height - textHeight) / 2; int x = 0; switch (alignment) case RIGHT: x = (int) dimensions.width - textWidth; break; case LEFT: x = (int) dimensions.width - textWidth) / 2; canvas.drawText(text, x, y, paint); return bitmap; /argb转换为rgba格式 public static ByteBuffer argb2rgba(Bitmap bmp) ByteBuffer bb = ByteBuffer.allocateDirect(bmp.getHeight() * bmp

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1