各位,如何实现小球沿指定路劲移动

初_凉 2012-04-22 03:01:11
比如给定坐标(0,0)——(0,1)——(1,1)——(1,2)
如何实现一个小球沿指定坐标间的直线运动,从起始点运动到终点?
...全文
318 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
初_凉 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
改一下,不知道是不是这里写错了,你没看懂
Java code

if (points.size() >= 1){
if (ball.getX()== points.get(0).getX()
&& ball.getY() == points.get(0).getY()&……
[/Quote]
能不能把move函数和主函数帮我写下,我写了个出问题了,现在没法上代码
sdojqy1122 2012-04-23
  • 打赏
  • 举报
回复
改一下,不知道是不是这里写错了,你没看懂

if (points.size() >= 1){
if (ball.getX()== points.get(0).getX()
&& ball.getY() == points.get(0).getY()&&points.size()<= 1) {//等于1说明就剩下最后一步,只要等他move完,线程就可以停止了。
flag = false;
}else {
if (ball.getX() == points.get(0).getX()
&& ball.getY() == points.get(0).getY()) {
// 拿Point.get(0)那个Point.get(1)出来比较,就可以确定方向。
Direction dir = getDir(points.get(0),points.get(1));
ball.dir = dir;
points.remove(0);
}

}
}
else{
flag = false;
}
sdojqy1122 2012-04-23
  • 打赏
  • 举报
回复
move方法。
初_凉 2012-04-23
  • 打赏
  • 举报
回复
就是第一个点到第二个点后,如何向第三个点运动?
初_凉 2012-04-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

Java code

import java.util.List;
class WatcherThread implements Runnable {
boolean flag = true;
private Ball ball;
private List<Point> points;

WatcherThread(Ball ball, List<Point> ……
[/Quote]


谢谢,思路很清晰,可我还是不太清楚,当从一个点运动到下一个点的时候,如何向下一个点运动?
sdojqy1122 2012-04-22
  • 打赏
  • 举报
回复

import java.util.List;
class WatcherThread implements Runnable {
boolean flag = true;
private Ball ball;
private List<Point> points;

WatcherThread(Ball ball, List<Point> points) {
this.ball = ball;
this.points = points;
}

@Override
public void run() {
while (flag) {
if (points.size() >= 1) {
if (ball.getX()== points.get(0).getX()
&& ball.getY() == points.get(0).getY()) {
flag = false;
} else {
if (ball.getX() == points.get(0).getX()
&& ball.getY() == points.get(0).getY()) {
// 拿Point.get(0)那个Point.get(1)出来比较,就可以确定方向。
Direction dir = getDir(points.get(0),points.get(1));//这样方向就得到了。
ball.dir = dir;
points.remove(0);
}
}
}
try {
Thread.sleep(20);
ball.move();
} catch (InterruptedException e) {
e.printStackTrace();
}

}
}

private Direction getDir(Point point, Point point1){//线程监听临界状况,在判断方向。
if(point1.getX()>point.getX()){
return Direction.LEFT;
}
if(point1.getY()>point.getY()){
return Direction.UP;
}
if(point1.getY()<point.getY()){
return Direction.DOWN;
}
if(point1.getX()<point.getX()){
return Direction.RIGHT;
}
return null;
}
}
enum Direction{//支持上下左右,你可以扩展的。
UP,LEFT,RIGHT,DOWN;
}
class Point {
private int x;
private int y;
public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public int getY() {
return y;
}

public void setY(int y) {
this.y = y;
}
}
class Ball {
static final int SPEED=50;
Direction dir;
private int x;
private int y;

public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}

public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
void move(){
//根据方向和速度,怎么move你知道吧。。。
}
}
初_凉 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

我开始理解错误,以为你是走格子的,一个二维数组int[][] a=new int[9][9];以为是这种。
既然你是根据坐标的,就不要考虑换算了。
[/Quote]



谢谢!只是关于方向的判断,以及该转换方向是的临界情况,我搞的不是太清楚......
sdojqy1122 2012-04-22
  • 打赏
  • 举报
回复
我开始理解错误,以为你是走格子的,一个二维数组int[][] a=new int[9][9];以为是这种。
既然你是根据坐标的,就不要考虑换算了。
初_凉 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

给了思路吧,相信这个会比贪吃蛇容易。
List<Point> list = new ArrayList<Piont>();

class Piont{
int x;
int y;
}
class Ball{
Direct dir;
int x;
int y;
}
初始化的时候把点加入。row,col跟x,y的换算你会把。
这是主要的类,用个监听器监听Ball的位置,假设……
[/Quote]


不好意思,你说的“row,col跟x,y的换算”我不太明白........我还是,菜鸟一枚......呵呵
sdojqy1122 2012-04-22
  • 打赏
  • 举报
回复
给了思路吧,相信这个会比贪吃蛇容易。
List<Point> list = new ArrayList<Piont>();

class Piont{
int x;
int y;
}
class Ball{
Direct dir;
int x;
int y;
}
初始化的时候把点加入。row,col跟x,y的换算你会把。
这是主要的类,用个监听器监听Ball的位置,假设你要的效果是小球缓慢持续移动。当小球的x,y等于list.get(0)时,计算方向,如果方向不同,改变方向。把list.remove(0);继续监听,循环。当list.size=0,退出监听器。
yangfanxinbituya 2012-04-22
  • 打赏
  • 举报
回复
。。。。看错题了,sorry 我在看看
yangfanxinbituya 2012-04-22
  • 打赏
  • 举报
回复
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/*
* 让一个小球可以运动
*/
public class Demo extends JFrame {
myPanel panel=null;
Demo()
{
panel=new myPanel(10,10,10);
this.add(panel);
this.addKeyListener(panel);
this.setSize(400,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}


public static void main(String[] args) {
Demo d=new Demo();
}
}
class myPanel extends JPanel implements KeyListener
{
int x;
int y;
int speed;
myPanel(int x,int y,int speed)
{
this.x=x;
this.y=y;
this.speed=speed;
}
public void paint(Graphics g)
{
super.paint(g);
g.setColor(Color.pink);
g.fillOval(x,y,10,10);
}

public void keyReleased(KeyEvent e) {


}
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
if((y+speed)<=400)
y+=speed;
}
else if(e.getKeyCode()==KeyEvent.VK_UP)
{
if((y-speed)>=0)
y-=speed;
}
else if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
if(x+speed<=300)
x+=speed;
}
else if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
if(x-speed>=0)
x-=speed;
}
this.repaint();

}
}
初_凉 2012-04-22
  • 打赏
  • 举报
回复
下面是我写的一个初步框架,目的是让一个小球任意给定的起点,通过九宫格的一系列路径,到达终点。
但是写不下去了,大家看看应该怎么完善!万分感谢!

package Drow;

import java.awt.Graphics;
import javax.swing.*;

public class PtoP extends JFrame
{
public static int N=100;
private int x1=200,y1=200,x2=300,y2=300;
private int radius=10;
private int advance=1;
PtoP()
{
setLocation(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(800,700);
setVisible(true);
}

public static void main(String[] args)
{
PtoP r=new PtoP();
do{
try{
Thread.sleep(50);
}catch(Exception e){}
r.run();
} while(true);
}
public void run()
{
if(x1!=x2){
if(x1<x2)
{
x1=x1+advance;
repaint();

}
else
{
x1=x1-advance;
repaint();
}
}
else
{
if(y1<y2)
{
y1=y1+advance;
repaint();
}
else
{
y1=y1-advance;
repaint();
}
}
}
public void paint(Graphics g)
{
super.paint(g);
g.fillOval(x1-radius/2, y1-radius/2, radius, radius);
g.drawLine(2*N,2*N,5*N,2*N);
g.drawLine(2*N,3*N,5*N,3*N);
g.drawLine(2*N,4*N,5*N,4*N);
g.drawLine(2*N,5*N,5*N,5*N);
g.drawLine(2*N,2*N,2*N,5*N);
g.drawLine(3*N,2*N,3*N,5*N);
g.drawLine(4*N,2*N,4*N,5*N);
g.drawLine(5*N,2*N,5*N,5*N);

}
}
初_凉 2012-04-22
  • 打赏
  • 举报
回复
能不能具体一点,我是新手,能不能把框架写出来?而且我是用的相邻两点间的坐标,判断想那个方向移动,但是,前两点比较后,第二个点和第歌三点进行比较,我就不知道怎么传值了......
看那边 2012-04-22
  • 打赏
  • 举报
回复
将路径保存起来。使用迭代遍历每一个点。遍历一次就画一次。就可以了。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧