All Projects → iSpring → Gameplane

iSpring / Gameplane

基于Android的仿微信打飞机游戏

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Gameplane

Tetr.js
🕹️ Tetris clone in HTML5 and JavaScript
Stars: ✭ 60 (-89.86%)
Mutual labels:  game, canvas
Canvas Test
🎮 happy canvas
Stars: ✭ 1,722 (+190.88%)
Mutual labels:  game, canvas
Micro Racing
🚗 🏎️ 🎮 online 3D multiplayer neural networks based racing game
Stars: ✭ 100 (-83.11%)
Mutual labels:  game, canvas
Stormplane
✈️《沙漠风暴》是一款基于Android开发的纵版飞行射击游戏,以雷电(Shooting Game)为原型,参考微信打飞机大战,通过自定义的SurfaceView来实现游戏,游戏画面、音乐、战斗特效都不错(附带apk安装包,可直接运行)
Stars: ✭ 938 (+58.45%)
Mutual labels:  game, canvas
Fmap
宇行地图:高仿高德地图Android客户端(持续更新中...)
Stars: ✭ 347 (-41.39%)
Mutual labels:  custom-view, canvas
Pixi.js
The HTML5 Creation Engine: Create beautiful digital content with the fastest, most flexible 2D WebGL renderer.
Stars: ✭ 34,982 (+5809.12%)
Mutual labels:  game, canvas
Hilo3d
Hilo3d, a WebGL Rendering Engine.
Stars: ✭ 123 (-79.22%)
Mutual labels:  game, canvas
Egret
🐦Some of the egret tutorial -《白鹭引擎笔记》
Stars: ✭ 108 (-81.76%)
Mutual labels:  game, canvas
Phaser3 Docs
Phaser 3 Documentation and TypeScript Defs
Stars: ✭ 339 (-42.74%)
Mutual labels:  game, canvas
One Html Page Challenge
Can you create something cool without modern tools?
Stars: ✭ 205 (-65.37%)
Mutual labels:  game, canvas
Hilo
A Cross-end HTML5 Game development solution developed by Alibaba Group
Stars: ✭ 5,723 (+866.72%)
Mutual labels:  game, canvas
Duckhunt Js
DuckHunt ported to JS and HTML5
Stars: ✭ 390 (-34.12%)
Mutual labels:  game, canvas
Canvas
Canvas Drawing Android Library
Stars: ✭ 35 (-94.09%)
Mutual labels:  custom-view, canvas
Tower game
💒 盖楼游戏 html5 canvas tower building game 🏢🏬🏦🏯🏰
Stars: ✭ 1,110 (+87.5%)
Mutual labels:  game, canvas
Freedrawview
A View on which you can freely draw, customizing paint width, alpha and color, and take a screenshot of the content. Useful for note apps, signatures or free hand writing.
Stars: ✭ 627 (+5.91%)
Mutual labels:  custom-view, canvas
Aimandshoot
A neuroevolution game experiment.
Stars: ✭ 201 (-66.05%)
Mutual labels:  game, canvas
Game
⚔️ An online JavaScript 2D Medieval RPG.
Stars: ✭ 388 (-34.46%)
Mutual labels:  game, canvas
Rustynes
👾 An NES emulator by Rust and WebAssembly
Stars: ✭ 399 (-32.6%)
Mutual labels:  game, canvas
Barotrauma
A 2D online multiplayer game taking place in a submarine travelling through the icy depths of Jupiter's moon Europa.
Stars: ✭ 547 (-7.6%)
Mutual labels:  game
Quadplay
The quadplay✜ fantasy console
Stars: ✭ 563 (-4.9%)
Mutual labels:  game

GamePlane

通过自定义View实现的Android微信打飞机游戏,支持API Level 8+,如果觉得不错,欢迎大家Star和Fork!

游戏说明

  1. 飞机一直发射子弹,用手指滑动可以改变飞机的位置
  2. 不同的敌机抗击打能力不同,当敌机被击中一定子弹数量时会爆炸,爆炸有动画效果
  3. 每隔一段时间都会有双发子弹或炸弹等道具奖励
  4. 获得双发子弹之后,子弹变为双发
  5. 获得炸弹道具之后,可以通过双击将屏幕内的所有敌机炸毁

这里写图片描述

这里写图片描述

实现

  • 我们定义了Sprite类,即精灵类,游戏中的飞机、子弹、奖励道具等都是继承自该类,我们通过moveTo()、move()等方法控制精灵的位置,通过beforeDraw()、onDraw()、afterDraw()实现相应的绘图逻辑。精灵类及其子类继承如下所示:

这里写图片描述

  • GameView是我们自定义的View类,主要重写了onDraw()onTouchEvent()方法。onDraw()源码如下所示:

    @Override
    protected void onDraw(Canvas canvas) {
        //我们在每一帧都检测是否满足延迟触发单击事件的条件
        if(isSingleClick()){
            onSingleClick(touchX, touchY);
        }
    
        super.onDraw(canvas);
    
        if(status == STATUS_GAME_STARTED){
            drawGameStarted(canvas);
        }else if(status == STATUS_GAME_PAUSED){
            drawGamePaused(canvas);
        }else if(status == STATUS_GAME_OVER){
            drawGameOver(canvas);
        }
    }
    

    在某一时刻GameView有三种状态:游戏开始STATUS_GAME_STARTED、游戏暂停STATUS_GAME_PAUSED和游戏结束STATUS_GAME_OVER。在不同的状态下我们会调用不同的绘制方法,这几个方法中都会调用方法postInvalidate(),这样驱动着View不断重绘,进而不断调用onDraw()方法实现游戏的动态效果。关于绘图技巧,可以参见另一篇博文《Android中Canvas绘图基础详解(附源码下载)》

  • 我们也重写了GameView的onTouchEvent()方法。由于View只支持单击事件,而不支持双击事件,所以我们自己定义了一个resolveTouchType()方法,通过这个方法可以合成我们自己想要的事件类型,比如双击事件。我们记录MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP的时间,一次单击事件由ACTION_DOWN和ACTION_UP两个事件合成,假设从ACTION_DOWN到ACTION_UP间隔小于200毫秒,我们就认为发生了一次单击事件。一次双击事件由两个点击事件合成,两个单击事件之间小于300毫秒,我们就认为发生了一次双击事件。在触发了双击事件的时候,我们就会触发炸弹,将屏幕内的敌机都炸毁。当处于ACTION_MOVE状态时,我们就通过event.getX()event.getY()改变战斗机的位置。关于MotionEvent的详细信息可以参另一篇博文《Android中TouchEvent触摸事件机制》

  • 我们还为GameView提供了start()、pause()、resume()和destroy()等方法,使其具备类似于Activity的生命周期,方便在Activity中对GameView进行状态管理。

  • 小敌机类,体积小,抗打击能力低;中敌机类,体积中等,抗打击能力中等;大敌机类,体积大,抗打击能力强。当敌机销毁的时候,我们使用了爆炸效果,使用了如下的图片: 这里写图片描述

这张图片演示了爆炸从开始到结束14个阶段的效果图,我们用两帧绘制爆炸的一个阶段,这样完整绘制一个爆炸效果需要28帧,在绘制完最后一个阶段之后,Explosion类会销毁自己。

如果觉得不错,欢迎大家Star和Fork!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].