Loading .gitignore +5 −1 Original line number Diff line number Diff line Loading @@ -34,4 +34,8 @@ output.json #NDK obj/ <<<<<<< HEAD .externalNativeBuild ======= .externalNativeBuild >>>>>>> Joystick app/src/main/java/com/example/a8_bitinvader/GameView.java +35 −0 Original line number Diff line number Diff line package com.example.a8_bitinvader; import android.content.Context; import android.view.MotionEvent; import android.view.SurfaceView; import android.graphics.Canvas; import android.graphics.Paint; // necessary when drawing Bitmaps with Canvas objects Loading @@ -14,6 +15,10 @@ public class GameView extends SurfaceView implements Runnable{ private Background background1, background2; private Paint paint; Joystick joystick = new Joystick(450,1300,100,40); //undecided location public GameView(Context context, int screenWidth, int screenHeight) { super(context); Loading Loading @@ -67,6 +72,8 @@ public class GameView extends SurfaceView implements Runnable{ if(background2.yPos > screenHeight) { background2.yPos = -screenHeight; } joystick.update(joystick); } /* Loading @@ -77,8 +84,12 @@ public class GameView extends SurfaceView implements Runnable{ Canvas canvas = getHolder().lockCanvas(); canvas.drawBitmap(background1.background, background1.xPos, background1.yPos, paint); canvas.drawBitmap(background2.background, background2.xPos, background2.yPos, paint); <<<<<<< HEAD Player p1 = new Player(getResources()); canvas.drawBitmap(p1.playerImg, p1.xPos, p1.yPos, paint); ======= joystick.draw(canvas); >>>>>>> Joystick getHolder().unlockCanvasAndPost(canvas); } } Loading Loading @@ -109,4 +120,28 @@ public class GameView extends SurfaceView implements Runnable{ } } @Override public boolean onTouchEvent(MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: if(joystick.isPressed((double)event.getX(), (double)event.getY())){ joystick.setIsPressed(true); } return true; case MotionEvent.ACTION_MOVE: if(joystick.getIsPressed()) { joystick.setActuator((double)event.getX(), (double)event.getY()); } return true; case MotionEvent.ACTION_UP: joystick.setIsPressed(false); joystick.resetActuator(); return true; } return super.onTouchEvent(event); } } No newline at end of file app/src/main/java/com/example/a8_bitinvader/Joystick.java 0 → 100644 +114 −0 Original line number Diff line number Diff line package com.example.a8_bitinvader; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; public class Joystick { private static final double MAX_SPEED = 3; //change ltr private int outerCircleCenterX; private int outerCircleCenterY; private int innerCircleCenterX; private int innerCircleCenterY; private int outerCircleRadii; private int innerCircleRadii; private Paint innerCirclePaint; private Paint outerCirclePaint; private double joystickCenterToTouchDistance; private boolean isPressed; private double actuatorX; private double actuatorY; private double XVelocity; private double YVelocity; public Joystick(int CenterPositionX, int CenterPositionY, int outerCircleRad, int innerCircleRad){ outerCircleCenterX = CenterPositionX; outerCircleCenterY = CenterPositionY; innerCircleCenterX = CenterPositionX; innerCircleCenterY = CenterPositionY; outerCircleRadii = outerCircleRad; innerCircleRadii = innerCircleRad; outerCirclePaint= new Paint(); outerCirclePaint.setColor(Color.YELLOW); outerCirclePaint.setStyle(Paint.Style.FILL_AND_STROKE); innerCirclePaint= new Paint(); innerCirclePaint.setColor(Color.WHITE); innerCirclePaint.setStyle(Paint.Style.FILL_AND_STROKE); } public void draw(Canvas canvas) { //outer canvas.drawCircle( outerCircleCenterX, outerCircleCenterY, outerCircleRadii, outerCirclePaint ); //inner canvas.drawCircle( innerCircleCenterX, innerCircleCenterY, innerCircleRadii, innerCirclePaint ); } public void update(Joystick joystick) { XVelocity = joystick.getActuatorX() * MAX_SPEED; YVelocity = joystick.getActuatorY() * MAX_SPEED; updateInnerCirclePosition(); } public void updateInnerCirclePosition() { innerCircleCenterX = (int) (outerCircleCenterX + actuatorX * outerCircleRadii); innerCircleCenterY = (int) (outerCircleCenterY + actuatorY * outerCircleRadii); } public boolean isPressed(double TouchPosx,double TouchPosy) { joystickCenterToTouchDistance = Math.sqrt(Math.pow(outerCircleCenterX-TouchPosx,2) + Math.pow(outerCircleCenterY-TouchPosy,2) ); return joystickCenterToTouchDistance < outerCircleRadii; } public void setIsPressed(boolean isPressed) { this.isPressed = isPressed; } public boolean getIsPressed() { return isPressed; } public void setActuator(double TouchPosx,double TouchPosy) { double deltaX = TouchPosx - outerCircleCenterX; double deltaY = TouchPosy - outerCircleCenterY; double deltaDistance = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY,2)); if(deltaDistance < outerCircleRadii) { actuatorX = deltaX/outerCircleRadii; actuatorY = deltaY/outerCircleRadii; }else { actuatorX = deltaX/deltaDistance; actuatorY = deltaY/deltaDistance; } } public void resetActuator() { actuatorX = 0.0; actuatorY = 0.0; } public double getActuatorX() { return actuatorX; } public double getActuatorY() { return actuatorY; } } Loading
.gitignore +5 −1 Original line number Diff line number Diff line Loading @@ -34,4 +34,8 @@ output.json #NDK obj/ <<<<<<< HEAD .externalNativeBuild ======= .externalNativeBuild >>>>>>> Joystick
app/src/main/java/com/example/a8_bitinvader/GameView.java +35 −0 Original line number Diff line number Diff line package com.example.a8_bitinvader; import android.content.Context; import android.view.MotionEvent; import android.view.SurfaceView; import android.graphics.Canvas; import android.graphics.Paint; // necessary when drawing Bitmaps with Canvas objects Loading @@ -14,6 +15,10 @@ public class GameView extends SurfaceView implements Runnable{ private Background background1, background2; private Paint paint; Joystick joystick = new Joystick(450,1300,100,40); //undecided location public GameView(Context context, int screenWidth, int screenHeight) { super(context); Loading Loading @@ -67,6 +72,8 @@ public class GameView extends SurfaceView implements Runnable{ if(background2.yPos > screenHeight) { background2.yPos = -screenHeight; } joystick.update(joystick); } /* Loading @@ -77,8 +84,12 @@ public class GameView extends SurfaceView implements Runnable{ Canvas canvas = getHolder().lockCanvas(); canvas.drawBitmap(background1.background, background1.xPos, background1.yPos, paint); canvas.drawBitmap(background2.background, background2.xPos, background2.yPos, paint); <<<<<<< HEAD Player p1 = new Player(getResources()); canvas.drawBitmap(p1.playerImg, p1.xPos, p1.yPos, paint); ======= joystick.draw(canvas); >>>>>>> Joystick getHolder().unlockCanvasAndPost(canvas); } } Loading Loading @@ -109,4 +120,28 @@ public class GameView extends SurfaceView implements Runnable{ } } @Override public boolean onTouchEvent(MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: if(joystick.isPressed((double)event.getX(), (double)event.getY())){ joystick.setIsPressed(true); } return true; case MotionEvent.ACTION_MOVE: if(joystick.getIsPressed()) { joystick.setActuator((double)event.getX(), (double)event.getY()); } return true; case MotionEvent.ACTION_UP: joystick.setIsPressed(false); joystick.resetActuator(); return true; } return super.onTouchEvent(event); } } No newline at end of file
app/src/main/java/com/example/a8_bitinvader/Joystick.java 0 → 100644 +114 −0 Original line number Diff line number Diff line package com.example.a8_bitinvader; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; public class Joystick { private static final double MAX_SPEED = 3; //change ltr private int outerCircleCenterX; private int outerCircleCenterY; private int innerCircleCenterX; private int innerCircleCenterY; private int outerCircleRadii; private int innerCircleRadii; private Paint innerCirclePaint; private Paint outerCirclePaint; private double joystickCenterToTouchDistance; private boolean isPressed; private double actuatorX; private double actuatorY; private double XVelocity; private double YVelocity; public Joystick(int CenterPositionX, int CenterPositionY, int outerCircleRad, int innerCircleRad){ outerCircleCenterX = CenterPositionX; outerCircleCenterY = CenterPositionY; innerCircleCenterX = CenterPositionX; innerCircleCenterY = CenterPositionY; outerCircleRadii = outerCircleRad; innerCircleRadii = innerCircleRad; outerCirclePaint= new Paint(); outerCirclePaint.setColor(Color.YELLOW); outerCirclePaint.setStyle(Paint.Style.FILL_AND_STROKE); innerCirclePaint= new Paint(); innerCirclePaint.setColor(Color.WHITE); innerCirclePaint.setStyle(Paint.Style.FILL_AND_STROKE); } public void draw(Canvas canvas) { //outer canvas.drawCircle( outerCircleCenterX, outerCircleCenterY, outerCircleRadii, outerCirclePaint ); //inner canvas.drawCircle( innerCircleCenterX, innerCircleCenterY, innerCircleRadii, innerCirclePaint ); } public void update(Joystick joystick) { XVelocity = joystick.getActuatorX() * MAX_SPEED; YVelocity = joystick.getActuatorY() * MAX_SPEED; updateInnerCirclePosition(); } public void updateInnerCirclePosition() { innerCircleCenterX = (int) (outerCircleCenterX + actuatorX * outerCircleRadii); innerCircleCenterY = (int) (outerCircleCenterY + actuatorY * outerCircleRadii); } public boolean isPressed(double TouchPosx,double TouchPosy) { joystickCenterToTouchDistance = Math.sqrt(Math.pow(outerCircleCenterX-TouchPosx,2) + Math.pow(outerCircleCenterY-TouchPosy,2) ); return joystickCenterToTouchDistance < outerCircleRadii; } public void setIsPressed(boolean isPressed) { this.isPressed = isPressed; } public boolean getIsPressed() { return isPressed; } public void setActuator(double TouchPosx,double TouchPosy) { double deltaX = TouchPosx - outerCircleCenterX; double deltaY = TouchPosy - outerCircleCenterY; double deltaDistance = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY,2)); if(deltaDistance < outerCircleRadii) { actuatorX = deltaX/outerCircleRadii; actuatorY = deltaY/outerCircleRadii; }else { actuatorX = deltaX/deltaDistance; actuatorY = deltaY/deltaDistance; } } public void resetActuator() { actuatorX = 0.0; actuatorY = 0.0; } public double getActuatorX() { return actuatorX; } public double getActuatorY() { return actuatorY; } }