Java 检测两个对象之间的碰撞,并在碰撞时增加点
在我的游戏中,我让球直接落下,但我想实现一种碰撞方法,检测球何时触网,然后删除球并在我的分数上加一分。我不知道从哪里开始,怎么做,所以非常感谢您的帮助。多谢各位 Main activity.javaJava 检测两个对象之间的碰撞,并在碰撞时增加点,java,android,collision-detection,collision,android-studio-3.0,Java,Android,Collision Detection,Collision,Android Studio 3.0,在我的游戏中,我让球直接落下,但我想实现一种碰撞方法,检测球何时触网,然后删除球并在我的分数上加一分。我不知道从哪里开始,怎么做,所以非常感谢您的帮助。多谢各位 Main activity.java package com.example.admin.basketball; import android.graphics.Point; import android.os.Handler; import android.support.v7.app.AppCompatActivity; impo
package com.example.admin.basketball;
import android.graphics.Point;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
//Layout
private RelativeLayout myLayout = null;
//Screen Size
private int screenWidth;
private int screenHeight;
//Position
private float ballDownY;
private float ballDownX;
//Initialize Class
private Handler handler = new Handler();
private Timer timer = new Timer();
//Images
private ImageView net = null;
private ImageView ball = null;
//for net movement along x-axis
float x;
float y;
//points
int points = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myLayout = (RelativeLayout) findViewById(R.id.myLayout);
//score
TextView score = (TextView) findViewById(R.id.score);
//imageviews
net = (ImageView) findViewById(R.id.net);
ball = (ImageView) findViewById(R.id.ball);
//retrieving screen size
WindowManager wm = getWindowManager();
Display disp = wm.getDefaultDisplay();
Point size = new Point();
disp.getSize(size);
screenWidth = size.x;
screenHeight = size.y;
//move to out of screen
ball.setX(-80.0f);
ball.setY(screenHeight + 80.0f);
//start timer
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
changePos();
}
});
}
}, 0, 20);
}
public void changePos() {
//down
ballDownY += 10;
if (ball.getY() > screenHeight) {
ballDownX = (float) Math.floor((Math.random() * (screenWidth -
ball.getWidth())));
ballDownY = -100.0f;
}
ball.setY(ballDownY);
ball.setX(ballDownX);
//give points for getting ball through net
//make net follow finger
myLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
x = event.getX();
y = event.getY();
if (event.getAction() == MotionEvent.ACTION_MOVE) {
net.setX(x);
net.setY(y);
}
return true;
}
});
}
}
ActivityMain.xml
<?xml version="1.0" encoding="utf-8"?>
<android.widget.RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/myLayout"
android:background="@drawable/bbackground"
tools:context="com.example.admin.basketball.MainActivity">
<ImageView
android:id="@+id/net"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="70dp"
app:srcCompat="@drawable/thenet"
/>
<ImageView
android:id="@+id/ball"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignTop="@+id/score"
android:layout_centerHorizontal="true"
app:srcCompat="@drawable/theball" />
<TextView
android:id="@+id/score"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginStart="11dp"
android:layout_marginTop="11dp"
android:textSize="25sp"
android:textStyle="italic"
android:textColor="@android:color/black"
android:text="Score: 0" />
</android.widget.RelativeLayout>
看看这个
检测两幅图像的碰撞
可以使用控件的坐标(即它们的位置和大小)检测两个矩形之间的交点
public boolean Collision(ImageView a, ImageView b)
{
int[] AposXY = new int[2];
a.getLocationOnScreen(AposXY);
int AX = AposXY[0];
int AY = AposXY[1];
int[] BposXY = new int[2];
b.getLocationOnScreen(BposXY);
int BX = BposXY[0];
int BY = BposXY[1];
Rectangle ar = new Rectangle(AX, AY, a.getMeasuredWidth(), a.getMeasuredHeight());
Rectangle br = new Rectangle(BX, BY, b.getMeasuredWidth(), b.getMeasuredHeight());
// Assuming there is an intersect method, otherwise just handcompare the values
// A Collision!
// we know which enemy (e), so we can call e.DoCollision();
//DoCollision();
return ar.Intersects(br);
}
看这个
检测两幅图像的碰撞
可以使用控件的坐标(即它们的位置和大小)检测两个矩形之间的交点
public boolean Collision(ImageView a, ImageView b)
{
int[] AposXY = new int[2];
a.getLocationOnScreen(AposXY);
int AX = AposXY[0];
int AY = AposXY[1];
int[] BposXY = new int[2];
b.getLocationOnScreen(BposXY);
int BX = BposXY[0];
int BY = BposXY[1];
Rectangle ar = new Rectangle(AX, AY, a.getMeasuredWidth(), a.getMeasuredHeight());
Rectangle br = new Rectangle(BX, BY, b.getMeasuredWidth(), b.getMeasuredHeight());
// Assuming there is an intersect method, otherwise just handcompare the values
// A Collision!
// we know which enemy (e), so we can call e.DoCollision();
//DoCollision();
return ar.Intersects(br);
}
碰撞检测?
试试这个;-)
碰撞检测?
试试这个;-)
“不知道从哪里开始”==>我根本没有尝试过任何东西。你可以通过控件的坐标检测两个矩形之间的交点,即它们的位置和大小。我没有开始,我已经开始并尝试了很多次,但留下不起作用或没有意义的代码有什么意义,只会让你更难受。非常感谢#无用的“不知道从哪里开始”==>我根本没有尝试过任何东西。你可以通过控件的坐标来检测两个矩形之间的交点,即它们的位置和大小不是我没有开始的,我已经开始并尝试了很多次,但留下不起作用或没有意义的代码有什么意义,只会让你更难受。非常感谢,没用