移动游戏背景

本文介绍了一种在Android平台上实现游戏背景移动的方法,通过定时更新背景位图显示区域,营造出主角不断前进的视觉效果。利用`Bitmap.createBitmap`方法从原始背景位图中截取不同的部分并显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:陈文源


在android系统上开发游戏的时候,需要处理主角在移动过程中背景的移动,借助于Bitmap的createBitmap方法可以挖取源位图的其中一块,这样可以在程序中通过定时器控制不断地挖取源位图不同位置的块,从而给用户看到背景移动的假象。

以下例子的主角是一架飞机,为了给用户造成飞机不断飞行的错觉,可以通过这种方式来控制背景图片不断下移,用户就会感觉飞机在不断地向上飞行。程序代码如下:


[java] view plain copy
  1. packagecom.android;
  2. importjava.util.Timer;
  3. importjava.util.TimerTask;
  4. importandroid.app.Activity;
  5. importandroid.content.Context;
  6. importandroid.graphics.Bitmap;
  7. importandroid.graphics.BitmapFactory;
  8. importandroid.graphics.Canvas;
  9. importandroid.os.Bundle;
  10. importandroid.os.Handler;
  11. importandroid.os.Message;
  12. importandroid.view.View;
  13. publicclassMoveBackgroundActivityextendsActivity
  14. {
  15. @Override
  16. publicvoidonCreate(BundlesavedInstanceState)
  17. {
  18. super.onCreate(savedInstanceState);
  19. setContentView(newMyView(this));
  20. }
  21. classMyViewextendsView
  22. {
  23. //记录背景位图的实际高度
  24. finalintBACK_HEIGHT=1700;
  25. //背景图片
  26. privateBitmapback;
  27. privateBitmapplane;
  28. //背景图片的开始位置
  29. finalintWIDTH=320;
  30. finalintHEIGHT=440;
  31. privateintstartY=BACK_HEIGHT-HEIGHT;
  32. publicMyView(Contextcontext)
  33. {
  34. super(context);
  35. back=BitmapFactory.decodeResource(context.getResources()
  36. ,R.drawable.back_img);
  37. plane=BitmapFactory.decodeResource(context.getResources()
  38. ,R.drawable.plane);
  39. finalHandlerhandler=newHandler()
  40. {
  41. publicvoidhandleMessage(Messagemsg)
  42. {
  43. if(msg.what==1)
  44. {
  45. //重新开始移动
  46. if(startY<=0)
  47. {
  48. startY=BACK_HEIGHT-HEIGHT;
  49. }
  50. else
  51. {
  52. startY-=3;
  53. }
  54. }
  55. invalidate();
  56. }
  57. };
  58. newTimer().schedule(newTimerTask()
  59. {
  60. @Override
  61. publicvoidrun()
  62. {
  63. handler.sendEmptyMessage(1);
  64. }
  65. },0,100);
  66. }
  67. @Override
  68. publicvoidonDraw(Canvascanvas)
  69. {
  70. //根据原始位图和Matrix创建新图片
  71. Bitmapbitmap2=Bitmap.createBitmap(back,0,startY
  72. ,WIDTH,HEIGHT);
  73. //绘制新位图
  74. canvas.drawBitmap(bitmap2,0,0,null);
  75. //绘制飞机
  76. canvas.drawBitmap(plane,160,380,null);
  77. }
  78. }
  79. }



在程序代码中

Bitmap bitmap2 = Bitmap.createBitmap(back, 0,startY,WIDTH,HEIGHT);


这句根据startY控制挖取back位图中不同位置的块,并将它位置在当前View上。

在程序的handleMessage方法中通过定时器来控制startY不断改变,这样可以看到back图片不断下移的效果,用户即可看到飞机向上飞行的错觉。

程序的运行效果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值