亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java中斷/停止定時器

Java中斷/停止定時器

素胚勾勒不出你 2022-05-25 16:38:49
我有一個 if 語句,它檢查我的對象(向導)是否命中了item. 如果他這樣做了,巫師的體型就會改變,他應該能夠在與障礙物的 1 次碰撞中幸存下來?,F在我被困在“幸存 1 個障礙物碰撞”,因為在我的碰撞方法中我已經設置了它,如果它InvulnerabilityActive是真的,那么它不應該檢測到碰撞。所以問題是,在整個持續時間(9 秒)內,沒有檢測到與障礙物的碰撞。巫師只是飛過。如何更改它,使其不會檢測到與第一個障礙物的碰撞,然后停用該項目?我想過使用該Timer.cancel()方法,但正如您所見,我只能用this關鍵字來引用它。Timer.cancel()在我使用它之前我不能打電話Timer。這是與物品的碰撞。try {    invulnerability = new Rectangle(GameWorld.obstacle1.getX() - GameRenderer.generator2.getValue2(),            GameWorld.obstacle1.getY() + GameRenderer.generator2.getValue1(), 15, 15);    if ((Intersector.overlaps(GameWorld.wizard.getBoundingRectangle(), invulnerability))){        GameRenderer.InvulnerabilityActive = true;        activeItem = true;        case0 = true;         GameWorld.wizard.setWidth(8);        GameWorld.wizard.setHeight(8);        new java.util.Timer().schedule(                new java.util.TimerTask() {                    public void run() {                        this.cancel();                        GameRenderer.InvulnerabilityActive = false;                        activeItem = false;                        case0 = false;                        GameWorld.wizard.setWidth(16);                        GameWorld.wizard.setHeight(16);                    }                 },                 9000        );     }} catch (NullPointerException e){     System.out.println("Caught NullPointerException!");}這是與障礙物碰撞的方法:public boolean collides(Wizard wizard) {   if (GameRenderer.InvulnerabilityActive){       return false;   } else {       return (Intersector.overlaps(wizard.getBoundingRectangle(), barUp)               || Intersector.overlaps(wizard.getBoundingRectangle(), barDown));   }}我知道問題出在 if 語句,因為它只是檢查項目是否處于活動狀態,但我不知道如何更改它以使其工作。
查看完整描述

1 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

您需要先檢查碰撞。如果檢測到碰撞-檢查InvulnerabilityActive。如果是true- 將其重置為false并返回 false。在下一次碰撞InvulnerabilityActive將是假的,碰撞將被檢測到。


public boolean collides(Wizard wizard) {

    if (Intersector.overlaps(wizard.getBoundingRectangle(), barUp)

            || Intersector.overlaps(wizard.getBoundingRectangle(), barDown)) {

        if (GameRenderer.InvulnerabilityActive) {

            GameRenderer.InvulnerabilityActive=false;

            return false;

        } else {

            return true;

        }

    } else {

        return false;

    }

}

可能會出現“向導飛過障礙物并不斷檢測到碰撞”之類的問題。在這種情況下:將額外的字段添加bool InvulnerabilityActivePending到GameRenderer. GameRenderer.InvulnerabilityActivePending = true;旁邊添加GameRenderer.InvulnerabilityActive = true;。并使用此代碼:


public boolean collides(Wizard wizard) {

    if (Intersector.overlaps(wizard.getBoundingRectangle(), barUp)

            || Intersector.overlaps(wizard.getBoundingRectangle(), barDown)) {

        if (GameRenderer.InvulnerabilityActive) {

            GameRenderer.InvulnerabilityActivePending=false;

            return false;

        } else {

            return true;

        }

    } else {

        GameRenderer.InvulnerabilityActive=GameRenderer.InvulnerabilityActivePending;

        return false;

    }

}

我們不是InvulnerabilityActive在碰撞開始時重置,而是在碰撞結束時重置它。


查看完整回答
反對 回復 2022-05-25
  • 1 回答
  • 0 關注
  • 229 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號