2014-02-04 4 views
-1

Итак, у меня есть этот код, и, очевидно, «g = gd» из метода рендеринга не изменяет значение поля «g».Как я могу вернуть значение из метода void в java

Как я могу сделать так, чтобы метод рендеринга изменял поле g?

Я хочу иметь графическое поле, поэтому я могу использовать графику для печати строк вне метода рендеринга, но я действительно не знаю, как это сделать.

private Graphics g; 

private BufferedImage background; 

public Tutorial(Core core){ 
    background = core.getResources().getImage(4); 
} 

public void render(Graphics gd) { 
    g = gd; 
    g.drawImage(background, 0, 0, null); 
} 

EDIT:

хорошо это весь класс, как я могу изменить его так, что displayMessage будет работать? tick() вызывается перед render(), это может быть проблемой?

package com.andrewxd.spaceinvaders.levels; 

import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.image.BufferedImage; 

import com.andrewxd.spaceinvaders.main.Core; 

public class Tutorial implements Levels{ 

    private Graphics g; 

    private BufferedImage background; 

    public Tutorial(Core core){ 
     background = core.getResources().getImage(4); 
    } 

    public void render(Graphics gd) { 
     g = gd; 
     g.drawImage(background, 0, 0, null); 
    } 

    public void tick() { 
     displayMessage("Welcome", 200,200); 
    } 

    public void displayMessage(String message, int x, int y) { 
     g.setFont(new Font("ARIAL", Font.BOLD, 20)); 
     g.setColor(Color.RED); 
     g.drawString(message, x, y); 
    } 

    public void displayMessage(String message, int x, int y, Font font) { 
     g.setFont(font); 
     g.setColor(Color.WHITE); 
     g.drawString(message, x, y); 
    } 

    public void displayMessage(String message, int x, int y, Font font, Color color) { 
     g.setFont(font); 
     g.setColor(color); 
     g.drawString(message, x, y); 
    } 

} 
+2

Вы не можете вернуть значение из метода 'void'. – Maroun

+3

'render' ** ** модифицирующий' g'. – Maroun

+0

изменить ту же ссылку, которую вы передали методу ... – TheLostMind

ответ

0

Вы можете попытаться получить объект из фабричного класса, который вы хотите изменить ... Но использовать return невозможно; в методе ничтожной ...

Вы должны использовать Google и найти лучшие методы и модели для этого случая ;-)

3
  • Вы не можете вернуть значение из метода пустоты, это цель void, он делает то, что делает и заканчивает.

  • Java передается по значению, когда вы передаете ссылочный тип, его адрес не будет изменен, но его атрибуты будут изменены.

0

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

0

«void» используется, когда вы не хотите, чтобы ваш метод возвращал значение.

Если вы хотите вернуть что-то, то isntead из "void", Поместите тип, который хотите вернуть. Например:

public Graphics returnG(){ 
Graphics g = new Graphics(); 
return g; 

} 

это вернет графический объект с именем g.

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

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