2009-02-07 18 views
21

मैं आईडीई के रूप में ब्लूजे का उपयोग कर जावा का उपयोग करके एक साधारण मंच गेम विकसित कर रहा हूं। फिलहाल मेरे पास बहुभुज और सरल आकार का उपयोग करके खींचे गए गेम में खिलाड़ी/दुश्मन स्प्राइट्स, प्लेटफॉर्म और अन्य आइटम हैं। आखिर में मैं उन्हें वास्तविक छवियों के साथ बदलने की उम्मीद करता हूं।जावा में पृष्ठभूमि छवि कैसे सेट करें?

अभी के लिए मैं जानना चाहता हूं कि छवि (या तो यूआरएल या स्थानीय स्रोत से) को मेरे गेम विंडो/कैनवास की 'पृष्ठभूमि' के रूप में सेट करने का सबसे आसान समाधान क्या है?

यदि मैं कुछ प्रोग्रामिंग कौशल बहुत अच्छा नहीं हूं और मैं अपने कार्यक्रम को यथासंभव सरल रखना चाहता हूं तो मैं इसकी सराहना करता हूं। कृपया उनके फ़ंक्शन पर विस्तृत करने के लिए टिप्पणियों के साथ उदाहरण कोड प्रदान करें, और यदि यह अपनी कक्षा में है, तो अन्य वर्गों पर उपयोग की जाने वाली प्रासंगिक विधियों पर कॉल कैसे करें।

बहुत बहुत धन्यवाद।

उत्तर

27

यह उत्तर इस बात पर निर्भर करता है कि एप्लिकेशन या एप्लेट AWT या Swing का उपयोग कर रहा है या नहीं।

(। असल में, कक्षाओं उस के साथ J ऐसे JApplet के रूप में और JFrame घुमाओ हैं, और Applet और Frame AWT हैं शुरू)

या तो मामले में, बुनियादी कदम होगा:

  1. ड्रा या एक छवि को Image ऑब्जेक्ट में लोड करें।
  2. की पेंटिंग स्पर्धा में पृष्ठभूमि छवि ड्रा Component आप चित्र लोड हो रही या तो Toolkit वर्ग का उपयोग करके या ImageIO वर्ग द्वारा किया जा सकता है पृष्ठभूमि आकर्षित करने के लिए चाहते हैं।

चरण 1.

Toolkit.createImage विधि एक स्थान एक String में निर्दिष्ट से एक Image लोड करने के लिए इस्तेमाल किया जा सकता:

Image img = Toolkit.getDefaultToolkit().createImage("background.jpg"); 

इसी तरह, ImageIO इस्तेमाल किया जा सकता:

Image img = ImageIO.read(new File("background.jpg"); 

चरण 2. पेंटिंग Component के लिए विधि जो पृष्ठभूमि को ओवरराइड करने की आवश्यकता होगी और घटक पर Image पेंट करें।

AWT के लिए, ओवरराइड करने के लिए विधि paint तरीका है, और Graphics उद्देश्य यह है कि paint विधि में सौंप दिया है drawImage विधि का उपयोग करें:

public void paint(Graphics g) 
{ 
    // Draw the previously loaded image to Component. 
    g.drawImage(img, 0, 0, null); 

    // Draw sprites, and other things. 
    // .... 
} 

स्विंग के लिए, ओवरराइड करने के लिए विधि paintComponent है JComponent की विधि, और Image को एडब्ल्यूटी में किए गए कार्यों के साथ खींचें।

public void paintComponent(Graphics g) 
{ 
    // Draw the previously loaded image to Component. 
    g.drawImage(img, 0, 0, null); 

    // Draw sprites, and other things. 
    // .... 
} 

सरल घटक उदाहरण

यहाँ एक Panel जो जब instantiated एक छवि फ़ाइल को लोड करता है, और अपने आप पर उस छवि को खींचता है:

: पेंटिंग पर

class BackgroundPanel extends Panel 
{ 
    // The Image to store the background image in. 
    Image img; 
    public BackgroundPanel() 
    { 
     // Loads the background image and stores in img object. 
     img = Toolkit.getDefaultToolkit().createImage("background.jpg"); 
    } 

    public void paint(Graphics g) 
    { 
     // Draws the img to the BackgroundPanel. 
     g.drawImage(img, 0, 0, null); 
    } 
} 

अधिक जानकारी के लिए

+0

आपके उत्तर के लिए धन्यवाद। मेरे पास कुछ प्रश्न हैं- 1. संबंधित छवि कहां स्थित होनी चाहिए? क्या आप छवि का एक उदाहरण स्रोतपथ दे सकते हैं क्योंकि मुझे यकीन नहीं है कि इसे कैसे रखा जाना चाहिए। – Dew

+0

2. कहें कि क्या मैं उपर्युक्त कोड का उपयोग करके 'पृष्ठभूमि' नामक एक वर्ग बना रहा हूं, पृष्ठभूमि कक्षा से मेरे 'गेम' वर्ग (जो दृश्य को नियंत्रित करता है, गेम विंडो का आकार) में मुझे किस विधि को कॉल करने की आवश्यकता है, पृष्ठभूमि छवि प्रकट करते हैं? कृपया एक उदाहरण दें। – Dew

+0

यहां कोड है जिसका उपयोग मैं वर्तमान में अपनी गेम विंडो के पृष्ठभूमि रंग को सेट करने के लिए करता हूं- देखें = नया वर्ल्ड व्यू (विश्व, चौड़ाई, ऊंचाई); view.setBackground (नया रंग (230, 245, 255)); – Dew

1

सबसे पहले एक नई कक्षा बनाएं जो WorldView कक्षा को बढ़ाती है। मैंने अपनी नई कक्षा Background बुलाया। तो इस नए वर्ग में paintBackground विधि को ओवरराइड करने के लिए आपको आवश्यक सभी जावा पैकेज आयात करने की आवश्यकता होगी। यह होना चाहिए:

import city.soi.platform.*; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.image.ImageObserver; 
import javax.swing.ImageIcon; 
import java.awt.geom.AffineTransform; 

अगला वर्ग के नाम के बाद यकीन है कि यह कहते हैं WorldView फैली हैं। कुछ इस तरह:

public class Background extends WorldView 

तो इस तरह Image कुछ प्रकार Game की चर खेल और प्रकार की एक छवि चर घोषित:

private Game game; 
private Image image; 

तो इस वर्ग के निर्माता में यकीन है कि प्रकार के खेल बनाने के Game कन्स्ट्रक्टर के हस्ताक्षर में है और कॉल में super पर आपको WorldView प्रारंभ करना होगा, गेम शुरू करें और छवि चर शुरू करें, इस तरह कुछ:

super(game.getCurrentLevel().getWorld(), game.getWidth(), game.getHeight()); 
this.game = game; 
bg = (new ImageIcon("lol.png")).getImage(); 

तो फिर तुम सिर्फ paintBackground विधि बिल्कुल उसी तरह के रूप में आप किया था जब Player कक्षा में paint विधि अधिभावी ओवरराइड। बस इस तरह:

private Background image; 

And in the Game constructor: 
image = new Background(this); 
:

public void paintBackground(Graphics2D g) 
{ 
float x = getX(); 
float y = getY(); 
AffineTransform transform = AffineTransform.getTranslateInstance(x,y); 
g.drawImage(bg, transform, game.getView()); 
} 

अब अंत में आप कुछ इस तरह नया वर्ग तुम सिर्फ Game वर्ग में किए गए एक वर्ग स्तर संदर्भ घोषित करने और Game निर्माता में यह आरंभ करने के लिए, है

आखिरकार आपको बस फ्रेम में पृष्ठभूमि जोड़ना है! यही बात है कि मुझे यकीन है कि हम सब गायब थे। आप चर frame घोषित किया गया है के बाद कुछ इस तरह करना है कि ऐसा करने के लिए:

frame.add(image); 

सुनिश्चित करें कि आप सिर्फ frame.pack(); से पहले इस कोड को जोड़ते हैं। यह भी सुनिश्चित करें कि आप पृष्ठभूमि छवि का उपयोग करें जो बहुत बड़ा नहीं है!

अब यह है! मैंने देखा है कि गेम इंजन जेपीईजी और पीएनजी छवि प्रारूपों को संभाल सकते हैं लेकिन दूसरों का भी समर्थन कर सकते हैं। भले ही इससे आपके गेम में पृष्ठभूमि छवि शामिल हो, यह सही नहीं है!क्योंकि एक बार जब आप अगले स्तर पर जाते हैं तो आपके सभी प्लेटफ़ॉर्म और स्प्राइट अदृश्य होते हैं और आप जो भी देख सकते हैं वह आपकी पृष्ठभूमि छवि और गेम में शामिल किसी भी जेएलबेल/जब्बोंट्स है।

0

या यह कोशिश;)

try { 
    this.setContentPane(
    new JLabel(new ImageIcon(ImageIO.read(new File("your_file.jpeg"))))); 
} catch (IOException e) {}; 
+0

अब ... यदि आप फ्रेम में घटक जोड़ते हैं तो क्या होता है? – kleopatra

-1

पथ केवल एक चीज आप वास्तव में के बारे में यदि आप जावा के लिए वास्तव में नए हैं चिंता करने की ज़रूरत है। आपको अपनी छवि को मुख्य प्रोजेक्ट फ़ाइल में खींचने की आवश्यकता है, और यह सूची के बहुत नीचे दिखाई देगा।

फिर फ़ाइल पथ बहुत सीधे आगे है। यह कोड कक्षा के लिए निर्माता में जाता है।

img = Toolkit.getDefaultToolkit().createImage("/home/ben/workspace/CS2/Background.jpg"); 

सीएस 2 मेरे प्रोजेक्ट का नाम है, और इससे पहले सबकुछ वर्कस्पेस की ओर जाता है।

+1

सवाल यह है कि छवि के रूप में छवि को कैसे प्रदर्शित किया जाए, फ़ाइल से छवि को लोड नहीं किया जाए। –

+0

दरअसल, @userunknown, फ़ाइल से छवि को लोड करने के तरीके को ओपी के बारे में उलझन में समस्या का बिल्कुल हिस्सा था। –

संबंधित मुद्दे