用JAVAFX做一个简单的桌面宠物(四)

(完结篇)

实现自动行走的功能(Move类)

类成员与构造函数

private long time;
private ImageView imageView;
private int direID;
   double x;
   double maxx;
   double width;
   Rectangle2D screenBounds = Screen.getPrimary().getVisualBounds();
   Stage stage;
private EventListener listen;
private int petID;
boolean exit;

public Move(long time, ImageView imgView, int dire, Stage primaryStage, EventListener el) {
	this.time = time;
	imageView = imgView;
	direID = dire;
	stage = primaryStage;
	listen = el;
	petID = listen.petID;//此petID是调用Move时的petID
}

多线程实现移动

使用listen.petID而不是定义一个变量int petID = listen.petID; 是因为在运动过程中点击“切换宠物”时实际的petID会改变,所以使用listen.petID就可以做到同步改变。若下面使用listen.mainimg(petID,0) 显示的就是点击“切换宠物”前的宠物,这个petID就是旧的petID。

public void run() {
	//点击就停下
	imageView.addEventHandler(MouseEvent.MOUSE_PRESSED,
			e ->{exit = true;listen.mainImg(listen.petID, 0);});
	while(!exit) {
		//如果petID!=listen.petID,则已“切换宠物”,此时要结束运动。
		if(petID!=listen.petID) {
			exit=true;
			return;
		}
	    width = imageView.getBoundsInLocal().getMaxX();//图片的宽度
	    x = stage.getX();//窗体位置
	    maxx = screenBounds.getMaxX();//屏幕宽度
		double speed=15;//每次移动的位移量
        if(x+speed+width >= maxx | x-speed<=0 | time<=0) {
        	this.interrupt();
        	listen.mainImg(listen.petID, 0);
        	return;
        }
        if(direID == 0) {	//向左走
        	stage.setX(x-speed);
        }
        else if(direID == 1) {	//向右走
        	stage.setX(x+speed);
        }
        time -= 300;//每0.3秒移动一次
        try {
		     Thread.sleep(300);
		    } catch (InterruptedException e) {    
		     e.printStackTrace();
		    }
	}
}

Move类完整代码

public class Move extends Thread{
	private long time;
	private ImageView imageView;
	private int direID;
    double x;
    double maxx;
    double width;
    Rectangle2D screenBounds = Screen.getPrimary().getVisualBounds();
    Stage stage;
	private EventListener listen;
	private int petID;
	boolean exit;
	
	public Move(long time, ImageView imgView, int dire, Stage primaryStage, EventListener el) {
		this.time = time;
		imageView = imgView;
		direID = dire;
		stage = primaryStage;
		listen = el;
		petID = listen.petID;//此petID是调用Move时的petID
	}
	
	public void run() {
		//点击就停下
		/*使用listen.petID而不是定义一个变量int petID = listen.petID;
		 *是因为在运动过程中点击“切换宠物”时实际的petID会改变,所以使用listen.petID就可以做到同步改变。
		 *若下面使用listen.mainimg(petID,0)显示的就是点击“切换宠物”前的宠物,这个petID就是旧的petID。
		 */
		imageView.addEventHandler(MouseEvent.MOUSE_PRESSED,
				e ->{exit = true;listen.mainImg(listen.petID, 0);});
		while(!exit) {
			//如果petID!=listen.petID,则已“切换宠物”,此时要结束运动。
			if(petID!=listen.petID) {
				exit=true;
				return;
			}
		    width = imageView.getBoundsInLocal().getMaxX();//图片的宽度
		    x = stage.getX();//窗体位置
		    maxx = screenBounds.getMaxX();//屏幕宽度
			double speed=15;//每次移动的位移量
	        if(x+speed+width >= maxx | x-speed<=0 | time<=0) {
	        	this.interrupt();
	        	listen.mainImg(listen.petID, 0);
	        	return;
	        }
	        if(direID == 0) {	//向左走
	        	stage.setX(x-speed);
	        }
	        else if(direID == 1) {	//向右走
	        	stage.setX(x+speed);
	        }
	        time -= 300;//每0.3秒移动一次
	        try {
			     Thread.sleep(300);
			    } catch (InterruptedException e) {    
			     e.printStackTrace();
			    }
		}
	}
}

完。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用JavaFX开发电商管理系统时,可以通过以下方式实现钱包余额功能: 1. 用户注册:在用户注册页面中,添加一个钱包余额输入框,当用户填写完其他必填信息后,可以选择输入一个初始的钱包余额。这个初始余额可以是系统预设的默认值,或者由用户自行填写。注册成功后,系统会保存用户的钱包余额信息。 2. 用户登录:在用户登录页面中,显示用户的钱包余额。用户成功登录后,系统会获取该用户的钱包余额并显示在界面上。 3. 购物结算:用户选择商品加入购物车后,进入结算页面。在结算页面中,显示用户的钱包余额和所购商品的总金额。用户可以选择使用钱包余额进行支付,系统会根据用户选择的支付方式计算应支付的金额和钱包余额的扣除情况。 4. 充值功能:用户可以选择充值按钮,进入充值页面。用户在充值页面中填写充值金额,并选择支付方式完成充值操作。充值后,系统会更新用户的钱包余额,并将充值记录保存到数据库中。 5. 提现功能:用户可以选择提现按钮,进入提现页面。用户在提现页面中填写提现金额,并选择提现方式完成提现操作。系统会根据用户的提现金额和提现方式进行相应的处理,并更新用户的钱包余额。 6. 钱包余额变动记录:系统会记录用户钱包余额的变动情况,包括充值、提现和购物结算的扣款记录。用户可以通过查看余额变动记录来了解自己的钱包使用情况。 通过以上方法,可以在电商管理系统中实现钱包余额功能,用户可以方便地查看余额、进行充值提现和使用余额进行购物结算。同时,对于用户的钱包操作,系统也会记录变动情况,以方便用户查看和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值