2010-08-19 4 views
1

Я работаю над игрой. View, Thread и Engine выполнены. Теперь я расскажу, как, например, установить координаты в мой битмап.Избегайте внутренних геттеров/сеттеров - Игра

Я успешно сделал это, используя getters/seters-method. Я читал в Интернете, что большинство из лучших разработчиков игр говорят, что «сделайте свою переменную участника общедоступной» и все такое.

Поскольку я читал раздел «Избегайте внутренних регенераторов/сеттеров» в http://developer.android.com/guide/practices/design/performance.html, я начал задаваться вопросом: как я могу изменить свой класс координат для достижения этого без «сеттеров», например?

Теперь мои координаты класса выглядит следующим образом:

package com.mygame.mygame; 

public class Coordinates { 
    int x; 
    int y; 
    Coordinates instance = null; 

public Coordinates getInstance(){ 
    if(instance == null){ 
    instance = new Coordinates(); 
    } 
    return instance; 
} 

    public Coordinates() {  
    } 

    public int getX() { 
     return x; 
    } 

    public void setX(int value) { 
     x = value; 
    } 

    public int getY() { 
     return y; 
    } 
    public void setY(int value) { 
     y = value; 
    } 

} 

Как я должен изменить свой код для достижения этой цели? Вызов метода дорог, но я до сих пор не знаю, как реструктурировать текущий код без геттеров и сеттеров.

ОБНОВЛЕНО

public GameEngine getInstance(){ 
if(instance == null){ 
    instance = new GameEngine(resources,view); 
    } 
    return instance; 
    } 

UPDATE 2

GameEngine

static Resources res; 

static GameView view; 

static GameEngine instance = null; 

public static GameEngine getInstance(Resources localResources, GameView localView){ 
    view = localView; 
    res = localResources; 
    if(instance == null){ 
     instance = new GameEngine(); //Init-stuff in the GameEngine 
    } 
    return instance; 
} 

и мой Gameview

static GameEngine engine; 
public GameView(Context localContext) { 
    //Other stuff 
    engine = GameEngine.getInstance(context.getResources(), this); 
    //Other stuff 
} 

Спасибо заранее!

ответ

3

Вы, кажется, неправильно поняли слово «внутренний». Этот документ еще говорят вам, что вы должны не делать, например:

public Coordinates(int x, int y) { 
    setX(x); 
    setY(y); 
} 

но больше

public Coordinates(int x, int y) { 
    this.x = x; 
    this.y = y; 
} 

Другими словами, избегать использования добытчиков/сеттеров в же классе, где они определены.

Ваш текущий класс не делает этого нигде в пути. Только метод getInstance() просто бесполезен в этом контексте. Я бы избавился от этого.

+0

Wow! В этом есть смысл! Но это способ сделать это? Не слишком ли дорогие вызовы в этих перспективах? Ну, у меня есть метод звонков в моем Engine. – Curtain

+0

Это нормальная практика, да. Что касается дороговизны, вызовы метода getter/setter особенно дешевы, это скорее вопрос стиля. Но в машине с несколькими ресурсами и практически без оптимизаций JIT, таких как мобильные телефоны, я бы предположил, что каждая оптимизация более чем приветствуется. – BalusC

+0

Ну ладно, так вот мой путь. Я обновил свой код с помощью кода моего GameEngine. Неужели этот экземпляр тоже бесполезен? – Curtain

1

Публикация по умолчанию для членов, если не указано иное. Просто не используйте геттер или сеттер для x и y.

+0

По умолчанию видимость не является общедоступной. Как и в текущем коде, члены видны классам только в одном пакете. – BalusC

Смежные вопросы