LibGDX Game vs ApplicationAdapter


12

เมื่อฉันสร้าง LibGDX โครงการใหม่ชั้นหลักของโครงการหลักขยายApplicationAdapter นี่คือลักษณะที่ปรากฏ

package com.marimba.apptest;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;

public class AppMain extends ApplicationAdapter {   
    @Override
    public void create () {

    }

    @Override
    public void render () {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    }
}

ดังนั้นฉันต้องเปลี่ยนApplicationAdapterเป็นGameหากฉันต้องการเรียกเมธอด setScreen เพื่อสลับระหว่างหน้าจอ ดังนั้นการใช้ApplicationAdapterคืออะไร? ฉันจะใช้มันเมื่อไหร่?

คำตอบ:


7

ดังที่ @ user3068350 กล่าวว่าทั้ง Game และ ApplicationAdapter จะใช้ ApplicationListener มีประโยชน์ในการขยายเกมหากคุณวางแผนที่จะใช้หน้าจออินเทอร์เฟซในเกมของคุณอย่างไรก็ตามนักพัฒนาบางคนอาจต้องการแนวทางที่แตกต่างและจัดการการจัดการหน้าจอด้วยวิธีของตนเอง หากเป็นกรณีนี้สิ่งเหล่านี้จะขยาย ApplicationAdapter

โดยส่วนตัวฉันชอบชั้นเรียนของฉันที่จะใช้อินเตอร์เฟส Updatable และ / หรือ Drawable ที่กำหนดเองเนื่องจากฉันแยกวิธีการเรนเดอร์ของฉันออกเป็นการอัพเดตและวาด ในกรณีนี้การใช้หน้าจอจะเอาชนะวัตถุประสงค์เนื่องจากอินเทอร์เฟซมีวิธีการเรนเดอร์


1

คลาสเกมใช้อินเทอร์เฟซ ApplicationListener และเป็นเพียงคลาสที่ออกแบบมาเพื่อให้สลับระหว่างหน้าจอที่แตกต่างกันได้ง่าย เมื่อมีการเรียกเมธอดใน ApplicationListener คลาสเกมจะดูแลการมอบหมายให้กับหน้าจอที่ตั้งค่าไว้ในปัจจุบัน


1
แต่ฉันควรใช้ ApplicationAdapter เมื่อใด และฉันจะใช้หน้าจอที่นี่ได้อย่างไร
Vahe Muradyan

2
คุณไม่จำเป็นต้องใช้ ApplicationAdapter ทั้ง ApplicationAdapter และ Game ใช้ส่วนต่อประสาน ApplicationListener คลาสอะแดปเตอร์เป็นเพียงคลาสที่ให้การใช้งานโครงกระดูกสำหรับอินเทอร์เฟซดังนั้นคุณไม่ต้องวุ่นวายกับโค้ดของคุณด้วยเนื้อความของเมธอดว่าง ในการใช้หน้าจอกับเกมคุณเรียก setScreen และส่งผ่านคลาสที่ใช้อินเทอร์เฟซหน้าจอ คุณสามารถทำให้คลาสหน้าจอของคุณใช้วัตถุเกมในตัวสร้างเพื่อให้คุณสามารถเปลี่ยนหน้าจอภายในหน้าจอ
3068350

1
ดังนั้นทำไมพวกเขาจึงสร้าง ApplicationAdapter ถ้ามันไม่มีประโยชน์อะไรเลย?
Vahe Muradyan

2
@VaheMuradyan ผู้ใช้ตอบแล้วว่า: คุณไม่ต้องยุ่งกับโค้ดของคุณโดยใช้เมธอดเปล่า ๆ เมื่อคุณใช้งานApplicationListenerโดยตรงคุณต้องให้วิธีการที่จำเป็นทั้งหมดรวมถึงวิธีที่คุณไม่ต้องการ (เช่นpause()หรือresume()ซึ่งไม่ได้ใช้งานเสมอ) ApplicationAdapterอยู่ที่นั่นเพื่อความสะดวกของคุณดังนั้นคุณไม่จำเป็นต้องใช้วิธีการที่ว่างเปล่า มันเป็นคลาสยูทิลิตี้ที่เรียบง่ายไม่มีการเพิ่มฟังก์ชั่นใหม่ - มันแค่ทำให้โค้ดของคุณสะอาด (หรือสั้นกว่า )
JustACluelessNewbie

1

เนื่องจาก ApplicationAdapter และคลาสเกมใช้อินเทอร์เฟซ ApplicationListener ทั้งคู่จึงสามารถใช้แทนกันได้เกือบทั้งหมดเมื่อสร้างเกมของคุณ หากคุณตั้งค่าโดยใช้หน้าจอไม่มีสิ่งใดที่ห้ามไม่ให้คุณนำไปใช้กับทั้งสองตัวเลือก

เกมชั้นจะมีเล็ก ๆ น้อย ๆ มากขึ้นค่าใช้จ่ายกับมันโดยใช้หน้าจอ อย่างไรก็ตามโอเวอร์เฮดนี้ได้รับการออกแบบมาเพื่อให้ง่ายต่อการใช้สเตจ / เลเวลต่าง ๆ ในเกมของคุณ สิ่งสำคัญคือให้สังเกตว่าค่าใช้จ่ายนี้น้อยมาก

ApplicationAdapterไม่มีค่าใช้จ่ายเพิ่มเติม (มันเป็นการนำตรงของ ApplicationListener) สิ่งนี้ช่วยให้คุณควบคุมได้มากขึ้นเมื่อคุณต้องทำทุกอย่างด้วยตัวเอง ส่วนตัวผมชอบใช้ ApplicationAdapters

TL: DR:ไม่มีความแตกต่างที่แท้จริงระหว่างพวกเขา ApplicationAdapter ช่วยให้คุณควบคุมได้มากขึ้น & เกมทำงานน้อยลงเล็กน้อย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.