ebiten: github.com/hajimehoshi/ebiten/mobile Index | Files

package mobile

import "github.com/hajimehoshi/ebiten/mobile"

Package mobile provides functions for mobile platforms (Android and iOS).

This package is used when you use `gomobile bind`. For `gomobile build`, you don't have to use this package.

For usage, see https://github.com/hajimehoshi/ebiten/wiki/Mobile, https://github.com/hajimehoshi/ebiten/wiki/Android and https://github.com/hajimehoshi/ebiten/wiki/iOS.

Index

Package Files

impl_empty.go mobile.go touches_empty.go

func Start Uses

func Start(f func(*ebiten.Image) error, width, height int, scale float64, title string) error

Start starts the game and returns immediately.

Different from ebiten.Run, this invokes only the game loop and not the main (UI) loop.

The unit of width/height is device-independent pixel (dp on Android and point on iOS).

Start is concurrent-safe.

Start always returns nil as of 1.5.0-alpha.

func Update Uses

func Update() error

Update updates and renders the game. This should be called on every frame.

If Update is called before Start is called, Update panics.

On Android, this should be called at onDrawFrame of Renderer (used by GLSurfaceView).

On iOS, this should be called at glkView:drawInRect: of GLKViewDelegate.

Update is concurrent-safe.

Update returns error when 1) OpenGL error happens, or 2) f in Start returns error samely as ebiten.Run.

func UpdateTouchesOnAndroid Uses

func UpdateTouchesOnAndroid(action int, id int, x, y int)

UpdateTouchesOnAndroid updates the touch state on Android.

This should be called with onTouchEvent of GLSurfaceView like this:

private double mDeviceScale = 0.0;

// pxToDp converts an value in pixels to dp.
private double pxToDp(double x) {
    if (mDeviceScale == 0.0) {
        mDeviceScale = getResources().getDisplayMetrics().density;
    }
    return x / mDeviceScale;
}

@Override
public boolean onTouchEvent(MotionEvent e) {
    for (int i = 0; i < e.getPointerCount(); i++) {
        int id = e.getPointerId(i);
        int x = (int)e.getX(i);
        int y = (int)e.getY(i);
        // Exported function for UpdateTouchesOnAndroid
        YourGame.UpdateTouchesOnAndroid(e.getActionMasked(), id, (int)pxToDp(x), (int)pxToDp(y));
    }
    return true;
}

The coodinate x/y is in dp.

UpdateTouchesOnAndroid can be called even before Start is called.

UpdateTouchesOnAndroid is concurrent-safe.

For more details, see https://github.com/hajimehoshi/ebiten/wiki/Android.

func UpdateTouchesOnIOS Uses

func UpdateTouchesOnIOS(phase int, ptr int64, x, y int)

UpdateTouchesOnIOS updates the touch state on iOS.

This should be called with touch handlers of UIViewController like this:

- (GLKView*)glkView {
    return (GLKView*)[self.view viewWithTag:100];
}
- (void)updateTouches:(NSSet*)touches {
    for (UITouch* touch in touches) {
        if (touch.view != [self glkView]) {
            continue;
        }
        CGPoint location = [touch locationInView: [self glkView]];
        // Exported function for UpdateTouchesOnIOS
        YourGameUpdateTouchesOnIOS(touch.phase, (int64_t)touch, location.x, location.y);
    }
}
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
    [self updateTouches:touches];
}
- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
    [self updateTouches:touches];
}
- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event {
    [self updateTouches:touches];
}
- (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event {
    [self updateTouches:touches];
}

The coodinate x/y is in point.

UpdateTouchesOnIOS can be called even before Start is called.

UpdateTouchesOnIOS is concurrent-safe.

For more details, see https://github.com/hajimehoshi/ebiten/wiki/iOS.

Package mobile imports 3 packages (graph) and is imported by 2 packages. Updated 2019-06-14. Refresh now. Tools for package owners.