日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Android讓游戲人物在屏幕上顯示

Java代碼:

成都創(chuàng)新互聯(lián)公司從2013年成立,先為富川等服務(wù)建站,富川等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為富川企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

 
 
 
  1. package eoe.demo;  
  2. import Android.content.Context;  
  3. import android.content.res.Resources;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.BitmapFactory;  
  6. import android.graphics.Canvas;  
  7. import android.graphics.Color;  
  8. import android.graphics.Paint;  
  9. import android.util.Log;  
  10. import android.view.KeyEvent;  
  11. import android.view.SurfaceHolder;  
  12. import android.view.SurfaceView;  
  13. import android.view.SurfaceHolder.Callback;  
  14. public class MySurfaceView extends SurfaceView implements Callback, Runnable {  
  15. private Thread th = new Thread(this);  
  16. private SurfaceHolder sfh;  
  17. private int SH, SW;  
  18. private Canvas canvas;  
  19. private Paint p;  
  20. private Paint p2;  
  21. private Resources res;  
  22. private Bitmap bmp;  
  23. private int bmp_x = 100, bmp_y = 100;  
  24. private boolean UP, DOWN, LEFT, RIGHT;  
  25. private int animation_up[] = { 3, 4, 5 };  
  26. private int animation_down[] = { 0, 1, 2 };  
  27. private int animation_left[] = { 6, 7, 8 };  
  28. private int animation_right[] = { 9, 10, 11 };  
  29. private int animation_init[] = animation_down;  
  30. private int frame_count;  
  31. public MySurfaceView(Context context) {  
  32. super(context);  
  33. this.setKeepScreenOn(true);  
  34. res = this.getResources();  
  35. bmp = BitmapFactory.decodeResource(res, R.drawable.enemy1);  
  36. sfh = this.getHolder();  
  37. sfh.addCallback(this);  
  38. p = new Paint();  
  39. p.setColor(Color.YELLOW);  
  40. p2 = new Paint();  
  41. p2.setColor(Color.RED);  
  42. p.setAntiAlias(true);  
  43. setFocusable(true); //備注1  
  44. }  
  45. public void surfaceCreated(SurfaceHolder holder) {  
  46. SH = this.getHeight();  
  47. SW = this.getWidth();  
  48. th.start();  
  49. }  
  50. public void draw() {  
  51. canvas = sfh.lockCanvas();  
  52. canvas.drawRect(0, 0, SW, SH, p); //備注2  
  53. canvas.save(); //備注3  
  54. canvas.drawText("Himi", bmp_x-2, bmp_y-10, p2);  
  55. canvas.clipRect(bmp_x, bmp_y, bmp_x + bmp.getWidth() / 13, bmp_y+bmp.getHeight());  
  56. if (animation_init == animation_up) {  
  57. canvas.drawBitmap(bmp, bmp_x - animation_up[frame_count] * (bmp.getWidth() / 13), bmp_y, p);  
  58. } else if (animation_init == animation_down) {  
  59. canvas.drawBitmap(bmp, bmp_x - animation_down[frame_count] * (bmp.getWidth() / 13), bmp_y, p);  
  60. } else if (animation_init == animation_left) {  
  61. canvas.drawBitmap(bmp, bmp_x - animation_left[frame_count] * (bmp.getWidth() / 13), bmp_y, p);  
  62. } else if (animation_init == animation_right) {  
  63. canvas.drawBitmap(bmp, bmp_x - animation_right[frame_count] * (bmp.getWidth() / 13), bmp_y, p);  
  64. }  
  65. canvas.restore(); //備注3  
  66. sfh.unlockCanvasAndPost(canvas);  
  67. }  
  68. public void cycle() {  
  69.      if (DOWN) {  
  70.      bmp_y += 5;  
  71. } else if (UP) {  
  72.     bmp_y -= 5;  
  73. } else if (LEFT) {  
  74.     bmp_x -= 5;  
  75. } else if (RIGHT) {  
  76.     bmp_x += 5;  
  77. }  
  78. if (DOWN || UP || LEFT || RIGHT) {  
  79. if (frame_count < 2) {  
  80. frame_count++;  
  81. } else {  
  82.    frame_count = 0;  
  83. }  
  84. }  
  85. if (DOWN == false && UP == false && LEFT == false && RIGHT == false) {  
  86.     frame_count = 0;  
  87. }  
  88. }  
  89. @Override  
  90. public boolean onKeyDown(int key, KeyEvent event) {  
  91. if (key == KeyEvent.KEYCODE_DPAD_UP) {  
  92. if (UP == false) {  
  93.     animation_init = animation_up;  
  94. }  
  95.   UP = true;  
  96. } else if (key == KeyEvent.KEYCODE_DPAD_DOWN) {  
  97. if (DOWN == false) {  
  98.    animation_init = animation_down;  
  99. }  
  100.    DOWN = true;  
  101. } else if (key == KeyEvent.KEYCODE_DPAD_LEFT) {  
  102. if (LEFT == false) {  
  103.    animation_init = animation_left;  
  104. }  
  105. LEFT = true;  
  106. } else if (key == KeyEvent.KEYCODE_DPAD_RIGHT) {  
  107.  if (RIGHT == false) {  
  108.     animation_init = animation_right;  
  109. }  
  110. RIGHT = true;  
  111. }  
  112. return super.onKeyDown(key, event);  
  113. }  
  114. /* (non-Javadoc)  
  115. * @see android.view.View#onKeyUp(int, android.view.KeyEvent)  
  116. */  
  117. @Override  
  118. public boolean onKeyUp(int keyCode, KeyEvent event) {  
  119. if (DOWN) {  
  120.   DOWN = false;  
  121. } else if (UP) {  
  122.   UP = false;  
  123. } else if (LEFT) {  
  124.   LEFT = false;  
  125. } else if (RIGHT) {  
  126.   RIGHT = false;  
  127. }  
  128. return super.onKeyUp(keyCode, event);  
  129. }  
  130. @Override  
  131. public void run() {  
  132. // TODO Auto-generated method stub  
  133. while (true) {  
  134. draw();  
  135. cycle();  
  136. try {  
  137. Thread.sleep(100);  
  138. } catch (Exception ex) {  
  139. }  
  140. }  
  141. }  
  142. @Override  
  143. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {  
  144. // TODO Auto-generated method stub  
  145. }  
  146. @Override  
  147. public void surfaceDestroyed(SurfaceHolder holder) {  
  148. // TODO Auto-generated method stub  
  149. }  

備注1 

此方法是用來(lái)響應(yīng)按鍵!如果是自己定義一個(gè)繼承自View的類,重新實(shí)現(xiàn)onKeyDown方法后,只有當(dāng)該View獲得焦點(diǎn)時(shí)才會(huì)調(diào)用onKeyDown方法,Actvity中的onKeyDown方法是當(dāng)所有控件均沒有處理該按鍵事件時(shí),才會(huì)調(diào)用.

備注2

這里也是對(duì)屏幕進(jìn)行刷屏操作,其實(shí)這也只是一種,之前文章里我也用到drawRGB的方法同樣實(shí)現(xiàn),當(dāng)然也可以用fillRect等來(lái)刷屏。

那么這里我想說下,在繼承view中,因?yàn)閛nDraw方法是系統(tǒng)自動(dòng)調(diào)用的,不像在surfaceview這里這樣去在run里面自己去不斷調(diào)用,在view中我們可以抵用 invalidate()/postInvalidate() 這兩種方法實(shí)現(xiàn)讓系統(tǒng)調(diào)用onDraw方法,這里也是和surfaceview中的不同之一!

備注3

這里canvas.save();和canvas.restore();是兩個(gè)相互匹配出現(xiàn)的,作用是用來(lái)保存畫布的狀態(tài)和取出保存的狀態(tài)的。這里稍微解釋一下,

當(dāng)我們對(duì)畫布進(jìn)行旋轉(zhuǎn),縮放,平移等操作的時(shí)候其實(shí)我們是想對(duì)特定的元素進(jìn)行操作,比如圖片,一個(gè)矩形等,但是當(dāng)你用canvas的方法來(lái)進(jìn)行這些操作的時(shí)候,其實(shí)是對(duì)整個(gè)畫布進(jìn)行了操作,那么之后在畫布上的元素都會(huì)受到影響,所以我們?cè)诓僮髦罢{(diào)用canvas.save()來(lái)保存畫布當(dāng)前的狀態(tài),當(dāng)操作之后取出之前保存過的狀態(tài),這樣就不會(huì)對(duì)其他的元素進(jìn)行影響


新聞名稱:Android讓游戲人物在屏幕上顯示
URL分享:http://www.5511xx.com/article/dpgjgdi.html