Java 如何禁止我的精灵对象在画布的特定坐标上移动
我想禁止我的Java 如何禁止我的精灵对象在画布的特定坐标上移动,java,Java,我想禁止我的Sprite对象在画布的特定坐标上移动。我该怎么做?我到目前为止所做的: 一揽子计划1 import java.awt.*; //使用AWT的图形和颜色 导入java.awt.event.*; //使用AWT的事件类和侦听器 接口导入javax.swing.*; //使用Swing的组件和容器 /** *自定义图形示例:使用键/按钮向左或向右移动对象。 *移动对象(精灵)在其自己的类中定义,并具有自己的 *操作并可自行绘制。* */雪碧{ //变量(包访问) 公共int x; 公
Sprite
对象在画布的特定坐标上移动。我该怎么做?我到目前为止所做的:
import java.awt.*;
//使用AWT的图形和颜色
导入java.awt.event.*;
//使用AWT的事件类和侦听器
接口导入javax.swing.*;
//使用Swing的组件和容器
/**
*自定义图形示例:使用键/按钮向左或向右移动对象。
*移动对象(精灵)在其自己的类中定义,并具有自己的
*操作并可自行绘制。*
*/雪碧{
//变量(包访问)
公共int x;
公共智力;
int宽度、高度;
//使用矩形进行说明
Color Color=Color.RED;//对象的颜色
//建造师
公共精灵(整数x、整数y、整数宽度、整数高度、颜色){
这个.x=x;
这个。y=y;
这个。宽度=宽度;
高度=高度;
这个颜色=颜色;
}
//在给定图形上下文的情况下绘制自身
公共空间涂料(图g){
g、 设置颜色(颜色);
g、 fillRect(x,y,宽度,高度);//填充矩形
//g.抽绳(20,0,20,240);
System.out.println(“绘制X:+X+”Y:+Y”);
//System.out.println(“绘制第二个X:+X+“Y:+Y”);}
公共类Project1扩展了JFrame{
//为各种尺寸定义常量
公共静态最终整型画布宽度=400;
公共静态最终内部画布高度=240;
公共静态最终颜色画布\u BG\u Color=Color.CYAN;
私人帆布;
//自定义绘图画布(内部类扩展了JPanel)
private Sprite Sprite;//移动的对象
//构造函数来设置GUI组件和事件处理程序
公共项目1(){
//构造一个给定x,y,宽度,高度,颜色的精灵
int x=0,y=0;
精灵=新精灵(画布宽度/2-30,画布高度/2-30,
10,10,颜色。红色);
//为按钮设置面板
JPanel btnPanel=newjpanel(newflowlayout());
JButton btnLeft=新JButton(“向左移动”);
btnPanel.add(btnLeft);
btnLeft.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件evt){
左移();
requestFocus();//将焦点更改为JFrame以接收KeyEvent
}
});
//JPanel btnPanel1=新的JPanel(新的FlowLayout());
JButton btnDown=新JButton(“下移”);
btnPanel.add(btnDown);
addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件evt){
向下移动();
requestFocus();//将焦点更改为JFrame以接收KeyEvent
}
});
JButton btnRight=新JButton(“向右移动”);
btnPanel.add(btnRight);
addActionListener(新的ActionListener(){
@凌驾
已执行的公共无效操作(操作事件evt){
moveRight();
requestFocus();//将焦点更改为JFrame以接收KeyEvent
}
});
JButton btnUp=新JButton(“上移”);
btnPanel.add(btnUp);
addActionListener(新的ActionListener(){
@凌驾
已执行的公共无效操作(操作事件evt){
moveUp();
requestFocus();//将焦点更改为JFrame以接收KeyEvent
}
});
//设置自定义绘图画布(JPanel)
画布=新的DrawCanvas();
setPreferredSize(新维度(画布宽度、画布高度));
//将两个面板添加到此框架
容器cp=getContentPane();
cp.setLayout(新的BorderLayout());
cp.add(画布,BorderLayout.CENTER);
cp.add(btnPanel,BorderLayout.SOUTH);
//“超级”JFrame触发KeyEvent
addKeyListener(新的KeyAdapter(){
@凌驾
按下公共无效键(KeyEvent evt){
开关(evt.getKeyCode()){
case KeyEvent.VK_LEFT:moveLeft();break;
case KeyEvent.VK_RIGHT:moveRight();break;
case KeyEvent.VK_DOWN:moveDown();break;
case KeyEvent.VK_UP:moveUp();break;
}
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle(“移动精灵”);
pack();//打包JFrame中的所有组件
setVisible(true);//显示它
requestFocus();/“super”JFrame请求focus接收KeyEvent}
//将精灵向左移动的助手方法私有void moveLeft(){
//保存当前尺寸以便重新绘制以擦除精灵
int savedX=sprite.x;
//更新精灵
sprite.x-=10;
//为了提高效率,只重新油漆受影响的区域,而不是整个JFrame
canvas.repaint(savedX,sprite.y,sprite.width,sprite.height);//将旧区域清除为背景
canvas.repaint(sprite.x,sprite.y,sprite.width,sprite.height);//绘制新位置}
//用于将精灵向右移动的助手方法私有void moveRight(){
//保存当前尺寸以便重新绘制以擦除精灵
int savedX=sprite.x;
//更新精灵
sprite.x+=10;
//为了提高效率,只重新油漆受影响的区域,而不是整个JFrame
canvas.repaint(savedX,sprite.y,sprite.width,sprite.height);//将旧区域清除为背景
canvas.repaint(sprite.x,sprite.y,sprite.width,sprite.height);//在新位置绘制}
私有无效向下移动(){
//保存当前尺寸以便重新绘制以擦除精灵
int saved=sprite.y;
//更新精灵
雪碧y+=10;
//为了提高效率,只重新油漆受影响的区域,而不是整个JFrame
canvas.repaint(sprite.x,已保存,sprite.width,sprite.height);//将旧区域清除为背景
画布.重绘(sprite.x,sprite.y,sprite.width,spri