admin 管理员组

文章数量: 887021


2024年2月27日发(作者:subtotal函数的使用方法112)

用几天的时间我研究了一下android的框架,android是这么样开发2D游戏的。

我们先来讲GameCanvas(游戏画布) 。这是一个类,你可以这样理解它-----我们游戏的画布。开发游戏的时候大部分的工作都会在这里面完成的 。那么在android 里面 怎样构成我们的GameCanvas。这里我用了

SurfaceView 类,使用这个类的原因是它比较适合游戏画布。然后我们再继承ck 这个接口

这样我们的GameCanvas类要实现其几个方法:

1 public void surfaceCreated(SurfaceHolder holder) {}

2 public void surfaceDestroyed(SurfaceHolder holder) {}

3 public void surfaceChanged(SurfaceHolder holder, int format, int

width,
 int height) {}

我们在surfaceCreated 方法里面初始化游戏,在surfaceChanged 处理一下当手机碰到外界情况的事件,

surfaceDestroyed 方法里面我们写释放资源等。

这样每个方法里面都会有个参数 SurfaceHolder 这个是什么呢??暂且先不讨论它,后面你会明白他有什么用了,

声明一个SurfaceHolder handle对象,然后在surfaceCreated()方法里面初始化它 如下:handle = der();

lback(this);

那在哪里绘制我们的游戏画布呢?讲到关键的地方了,这里我们重载view

的 public void draw(Canvas canvas){}方法,

我们就在这个方法里面绘制我们的游戏。

java代码:

1. public class GameCanvas extends SurfaceView implements

ck

2. {

3. private SurfaceHolder handle = null;

4.

5. private int width = 0;

6.

7. private int height = 0;

8.

9. public GameCanvas(){

10.

11. handle = der();

12. lback(this);

13.

14. }

15.

16. public void initGame(){

17.

18. width = th();

19. height = ght();

20. {

21.

22. public void gameLogic(){

23.

24.

25. }

26.

27. public void gameInput(){

28.

29. }

30.

31. @Override

32. public void draw(Canvas canvas){

33.

34. Paint paint = new Paint(_ALIAS_FLAG);

35. or();

36.

37. ct(new Rect(int startX,int StartY,int endX,int endY));//此处的Rect跟java里面的有点区别

38. //,不过差不多 自己写坐标就行 0,0,320,440

39.

40. //上面的语句是将屏幕绘制成黑色

41.

42. or();

43. xt("Andoid GameCanvas",100,100,paint);

44.

45. //

46. }

47.

48. //

49. @Override

50. public void surfaceCreated(SurfaceHolder holder) {

51.

52. this. initGame();

53. new Thread(this){

54. public void run(){

55.

56. while(true)

57. {

58. long start=tTimeMillis();

59. Canvas canvas = nvas(null);

60. //logic

61. (canvas);

62. ();

63. //input()

64. CanvasAndPost(canvas);

65. long end=tTimeMillis();

66. if(100>end-start){

67. try{(100-(end-start));}catch(Exception e){}

68. }

69. }

70. }

71. }.start();

72.

73. }

74. @Override

75. public void surfaceDestroyed(SurfaceHolder holder) {

76.

77. }

78. @Override

79. public void surfaceChanged(SurfaceHolder holder, int format, int width,int

height){

80.

81. }

82.

83. }

复制代码


本文标签: 游戏 画布 方法 绘制 碰到