Skip to content

[android] fix the bug that HelloWorld crashed when touchting the screen. #177

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
1 commit merged into from
Mar 17, 2011
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions HelloWorld/android/src/org/cocos2dx/lib/Cocos2dxAccelerometer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.cocos2dx.lib;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;

/**
*
* This class is used for controlling the Accelerometer
*
*/
public class Cocos2dxAccelerometer implements SensorEventListener {

private static final String TAG = "Cocos2dxAccelerometer";
private Context mContext;
private SensorManager mSensorManager;
private Sensor mAccelerometer;

public Cocos2dxAccelerometer(Context context){
mContext = context;

//Get an instance of the SensorManager
mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}

public void enable() {
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
}

public void disable () {
mSensorManager.unregisterListener(this);
}

@Override
public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;

onSensorChanged(event.values[0], event.values[1], event.values[2], event.timestamp);

}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

private static native void onSensorChanged(float x, float y, float z, long timeStamp);
}
106 changes: 101 additions & 5 deletions HelloWorld/android/src/org/cocos2dx/lib/Cocos2dxActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,18 +51,118 @@
import android.util.Log;

public class Cocos2dxActivity extends Activity{
public static int screenWidth;
public static int screenHeight;
private static Cocos2dxMusic backgroundMusicPlayer;
private static Cocos2dxSound soundPlayer;
private static Cocos2dxAccelerometer accelerometer;
private static boolean accelerometerEnabled = false;

private static native void nativeSetPaths(String apkPath);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// get frame size
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
accelerometer = new Cocos2dxAccelerometer(this);

// init media player and sound player
backgroundMusicPlayer = new Cocos2dxMusic(this);
soundPlayer = new Cocos2dxSound(this);
}

public static void enableAccelerometer() {
accelerometerEnabled = true;
accelerometer.enable();
}

public static void disableAccelerometer() {
accelerometerEnabled = false;
accelerometer.disable();
}

public static void playBackgroundMusic(String path, boolean isLoop){
backgroundMusicPlayer.playBackgroundMusic(path, isLoop);
}

public static void stopBackgroundMusic(){
backgroundMusicPlayer.stopBackgroundMusic();
}

public static void pauseBackgroundMusic(){
backgroundMusicPlayer.pauseBackgroundMusic();
}

public static void resumeBackgroundMusic(){
backgroundMusicPlayer.resumeBackgroundMusic();
}

public static void rewindBackgroundMusic(){
backgroundMusicPlayer.rewindBackgroundMusic();
}

public static boolean isBackgroundMusicPlaying(){
return backgroundMusicPlayer.isBackgroundMusicPlaying();
}

public static float getBackgroundMusicVolume(){
return backgroundMusicPlayer.getBackgroundVolume();
}

public static void setBackgroundMusicVolume(float volume){
backgroundMusicPlayer.setBackgroundVolume(volume);
}

public static int playEffect(String path){
return soundPlayer.playEffect(path);
}

public static void stopEffect(int soundId){
soundPlayer.stopEffect(soundId);
}

public static float getEffectsVolume(){
return soundPlayer.getEffectsVolume();
}

public static void setEffectsVolume(float volume){
soundPlayer.setEffectsVolume(volume);
}

public static void preloadEffect(String path){
soundPlayer.preloadEffect(path);
}

public static void unloadEffect(String path){
soundPlayer.unloadEffect(path);
}

public static void end(){
backgroundMusicPlayer.end();
soundPlayer.end();
}

@Override
protected void onResume() {
super.onResume();
if (accelerometerEnabled) {
accelerometer.enable();
}
}

@Override
protected void onPause() {
super.onPause();
if (accelerometerEnabled) {
accelerometer.disable();
}
}

protected void setPackgeName(String packageName) {
String apkFilePath = "";
ApplicationInfo appInfo = null;
Expand All @@ -79,8 +179,4 @@ protected void setPackgeName(String packageName) {
// add this link at the renderer class
nativeSetPaths(apkFilePath);
}

public static int screenWidth;
public static int screenHeight;
private static native void nativeSetPaths(String apkPath);
}
147 changes: 102 additions & 45 deletions HelloWorld/android/src/org/cocos2dx/lib/Cocos2dxGLSurfaceView.java
Original file line number Diff line number Diff line change
@@ -1,62 +1,119 @@
package org.cocos2dx.lib;

import org.cocos2dx.lib.touch.metalev.multitouch.controller.MultiTouchController;
import org.cocos2dx.lib.touch.metalev.multitouch.controller.MultiTouchController.MultiTouchObjectCanvas;
import org.cocos2dx.lib.touch.metalev.multitouch.controller.MultiTouchController.PointInfo;
import org.cocos2dx.lib.touch.metalev.multitouch.controller.MultiTouchController.PositionAndScale;

import android.content.Context;
import android.opengl.GLSurfaceView;
import android.util.Log;
import android.view.MotionEvent;

public class Cocos2dxGLSurfaceView extends GLSurfaceView {
public class Cocos2dxGLSurfaceView extends GLSurfaceView implements
MultiTouchObjectCanvas {
private static final String TAG = Cocos2dxGLSurfaceView.class
.getCanonicalName();
private MultiTouchController<Void> mTouchController;
private Cocos2dxRenderer mRenderer;

public Cocos2dxGLSurfaceView(Context context) {
super(context);
mRenderer = new Cocos2dxRenderer();
setRenderer(mRenderer);

mTouchController = new MultiTouchController<Void>(this);
}

public boolean onTouchEvent(final MotionEvent event) {
boolean result = false;
final float x = event.getX();
final float y = event.getY();

switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
queueEvent(new Runnable() {
// This method will be called on the rendering thread
public void run() {
mRenderer.handleActionDown(x, y);
}});

result = true;
break;
case MotionEvent.ACTION_UP:
queueEvent(new Runnable() {
// This method will be called on the rendering thread
public void run() {
mRenderer.handleActionUp(x, y);
}});

result = true;
break;
case MotionEvent.ACTION_CANCEL:
queueEvent(new Runnable() {
// This method will be called on the rendering thread
public void run() {
mRenderer.handleActionCancel(x, y);
}});

result = true;
break;
case MotionEvent.ACTION_MOVE:
queueEvent(new Runnable() {
// This method will be called on the rendering thread
public void run() {
mRenderer.handleActionMove(x, y);
}});

result = true;
break;
if (mTouchController.onTouchEvent(event)) {
final PointInfo pt = mTouchController.mCurrPt;
final int ids[] = new int[pt.getNumTouchPoints()];
final float xs[] = new float[pt.getNumTouchPoints()];
final float ys[] = new float[pt.getNumTouchPoints()];

for (int i = 0; i < pt.getNumTouchPoints(); i++) {
ids[i] = pt.getPointerIds()[i];
xs[i] = pt.getXs()[i];
ys[i] = pt.getYs()[i];
Log.d(TAG,
"ACTION: " + pt.getAction() + "id[i]="
+ pt.getPointerIds()[i] + "x[i]= "
+ pt.getXs()[i] + " y[i]= " + pt.getYs()[i]);
}

switch (pt.getAction()) {
case MotionEvent.ACTION_DOWN:
case 261:
case MotionEvent.ACTION_POINTER_DOWN:
Log.d(TAG, "ACTION_DOWN");
queueEvent(new Runnable() {
@Override
public void run() {
mRenderer.handleActionDown(ids, xs, ys);
}
});
break;

case MotionEvent.ACTION_MOVE:
Log.d(TAG, "ACTION_MOVE");
queueEvent(new Runnable() {
@Override
public void run() {
mRenderer.handleActionMove(ids, xs, ys);
}
});
break;

case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
Log.d(TAG, "ACTION_UP");
queueEvent(new Runnable() {
@Override
public void run() {
mRenderer.handleActionUp(ids, xs, ys);
}
});
break;

case MotionEvent.ACTION_CANCEL:
queueEvent(new Runnable() {
@Override
public void run() {
mRenderer.handleActionCancel(ids, xs, ys);
}
});
break;
}

return true;
}

return result;
return false;
}

@Override
public Object getDraggableObjectAtPoint(PointInfo touchPoint) {
// TODO Auto-generated method stub
return null;
}

@Override
public void getPositionAndScale(Object obj,
PositionAndScale objPosAndScaleOut) {
// TODO Auto-generated method stub

}

Cocos2dxRenderer mRenderer;
@Override
public boolean setPositionAndScale(Object obj,
PositionAndScale newObjPosAndScale, PointInfo touchPoint) {
// TODO Auto-generated method stub
return false;
}

@Override
public void selectObject(Object obj, PointInfo touchPoint) {
// TODO Auto-generated method stub

}
}
Loading