Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在另一个图像的某个点绘制图像_Java_Image_Swing_Awt_Graphics2d - Fatal编程技术网

Java 在另一个图像的某个点绘制图像

Java 在另一个图像的某个点绘制图像,java,image,swing,awt,graphics2d,Java,Image,Swing,Awt,Graphics2d,所以我创建了一个侧边滚动条,我试图在另一个图像的点上画一个图像 我有一张5000 x 500的背景图像,假设我想画一张25x25的图像,背景图像的500,50。我该怎么做 到目前为止,我已经尝试: Coins c = new Coins(img.getWidth(this) - 4500, img.getHeight(this) - 250); 但这只是在帧的500,50处绘制,所以当我向右滚动时,它在图像上“移动”。我想,在向右滚动一次后,硬币图像绘制在500,50的图像上,仍然是495,5

所以我创建了一个侧边滚动条,我试图在另一个图像的点上画一个图像

我有一张5000 x 500的背景图像,假设我想画一张25x25的图像,背景图像的500,50。我该怎么做

到目前为止,我已经尝试:

Coins c = new Coins(img.getWidth(this) - 4500, img.getHeight(this) - 250);
但这只是在帧的500,50处绘制,所以当我向右滚动时,它在图像上“移动”。我想,在向右滚动一次后,硬币图像绘制在500,50的图像上,仍然是495,50的帧

我也可以使用背景图像的getGraphics并在其上绘制较小的图像,但我认为因为我在创建对象的过程中设置了绘制点,所以我不能这样做

角色不移动,除了上下移动,只是背景滚动,所以我希望硬币像背景一样移动

图片: (无法嵌入,因为我没有10个代表点) http://dl.dropbox.com/u/47632315/coin.png

和SSCCE:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.awt.image.ImageObserver;
import java.io.IOException;
import javax.imageio.ImageIO;

public class SideScroller extends JPanel implements KeyListener {

    public static void main(String args[]) throws Exception {
        SideScroller f = new SideScroller("Side Scroller");
    }

    JFrame f = new JFrame();
    int x = 0;
    int y = 0;
    int k = 10;
    int j = 50;
    int characterY = 351;
    boolean canJump = true;
    boolean keyPressed[] = new boolean[3];

    Image img;
    Image character;

    Coins c = new Coins(x + 500, y + 350);

    public SideScroller(String s) throws MalformedURLException, IOException {
        img = ImageIO.read(new URL("http://dl.dropbox.com/u/47632315/sideScrollerBG.png"));
        character = ImageIO.read(new URL("http://dl.dropbox.com/u/47632315/char.png"));

        f.setTitle(s);
        // don't use 'magic numbers' when descriptive constants are defined!
        //f.setDefaultCloseOperation(3);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(false);
        // Better to ask when loaded.
        //setPreferredSize(new Dimension(1000, 500));
        setPreferredSize(new Dimension(1000, img.getHeight(this)));
        f.add(this);
        f.pack();
        // usually harmful, rarely necessary.
//      f.setLayout(null);
        // Looks like a splash screen
        //f.setLocationRelativeTo(null);
        // located by platform default, best.
        f.setLocationByPlatform(true);
        f.addKeyListener(this);
        getKeys();

        // should be done last
        f.setVisible(true);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, x, y, this);
        g.drawImage(character, 50, characterY, this);
        c.paint(g, this);
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_ESCAPE) {
            System.exit(0);
        }
        if (keyCode == KeyEvent.VK_RIGHT) {
            keyPressed[0] = true;
        }
        if (keyCode == KeyEvent.VK_LEFT) {
            keyPressed[1] = true;
        }
        if (canJump) {
            if (keyCode == KeyEvent.VK_SPACE) {
                // better to use a javax.swing.Timer here
                new Thread(new Runnable() {
                    public void run() {
                        canJump = false;
                        for (double i = 0; i <= 5.1; i += .2) {
                            characterY = (int) (k * i * i - j * i + 351);
                            f.repaint();
                            System.out.println(characterY);
                            System.out.println(canJump);
                            try {
                                Thread.sleep(25);
                            } catch (InterruptedException e) {
                                System.err.println(e);
                            }
                        }
                        repaint();
                        canJump = true;
                    }
                }).start();
            }
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_RIGHT) {
            keyPressed[0] = false;
        }
        if (keyCode == KeyEvent.VK_LEFT) {
            keyPressed[1] = false;
        }
    }

    public void getKeys() {
        new Thread(new Runnable() {
            public void run() {
                while (true) {
                    if (keyPressed[0]) {
                        x -= 5;
                        repaint();
                    }
                    if (keyPressed[1]) {
                        if (x != 0) {
                            x += 5;
                            repaint();
                        }
                    }
                    try {
                        Thread.sleep(25);
                    } catch (InterruptedException e) {
                        System.err.println(e);
                    }
                }
            }
        }).start();
    }
}

class Coins extends pickUpObject {

    Image coin; 

    public Coins(int x, int y) throws MalformedURLException, IOException{
        super(x, y);
        super.x = x;
        super.y = y;
        coin = ImageIO.read(new URL("http://dl.dropbox.com/u/47632315/coin.png"));
    }

    public void paint(Graphics g, ImageObserver o){
        g.drawImage(coin, x, y, o);
    }
}

abstract class pickUpObject {

    int x, y;

    public pickUpObject(int x, int y){
    }

    public abstract void paint(Graphics g, ImageObserver o);
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.net。*;
导入java.awt.image.ImageObserver;
导入java.io.IOException;
导入javax.imageio.imageio;
公共类SideScroller扩展JPanel实现KeyListener{
公共静态void main(字符串args[])引发异常{
侧卷轴f=新侧卷轴(“侧卷轴”);
}
JFrame f=新的JFrame();
int x=0;
int y=0;
int k=10;
int j=50;
int字符y=351;
布尔值canJump=true;
布尔键按下[]=新布尔[3];
图像img;
图像特征;
硬币c=新硬币(x+500,y+350);
公共侧卷轴(字符串s)引发畸形的DurLexException,IOException{
img=ImageIO.read(新URL(“http://dl.dropbox.com/u/47632315/sideScrollerBG.png"));
character=ImageIO.read(新URL(“http://dl.dropbox.com/u/47632315/char.png"));
f、 片名;
//定义描述性常数时不要使用“幻数”!
//f、 设置默认关闭操作(3);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f、 可设置大小(假);
//最好在加载时询问。
//setPreferredSize(新尺寸(1000500));
setPreferredSize(新维度(1000,img.getHeight(this)));
f、 加上(这个);
f、 包装();
//通常有害,很少必要。
//f.设置布局(空);
//看起来像一个闪屏
//f、 setLocationRelativeTo(空);
//默认情况下位于平台,最好。
f、 setLocationByPlatform(真);
f、 addKeyListener(此);
getKeys();
//应该最后完成
f、 setVisible(真);
}
公共组件(图形g){
超级组件(g);
g、 绘图图像(img,x,y,this);
g、 drawImage(character,50,characterY,this);
c、 油漆(g,本);
}
@凌驾
public void keyTyped(KeyEvent e){
}
@凌驾
按下公共无效键(按键事件e){
int keyCode=e.getKeyCode();
if(keyCode==KeyEvent.VK_ESCAPE){
系统出口(0);
}
if(keyCode==KeyEvent.VK_RIGHT){
按下键[0]=真;
}
if(keyCode==KeyEvent.VK_左){
按下键[1]=真;
}
如果(可以跳转){
if(keyCode==KeyEvent.VK_空间){
//最好在这里使用javax.swing.Timer
新线程(newrunnable()){
公开募捐{
canJump=false;

对于(双i=0;i一种方法是将
Graphics
标记为
Graphics2D
,然后对其进行翻译

    // here we 'translate' the graphics 2D object to a separate location  
    g2d.translate(x,0);
屏风 在此图像中,角色向右移动并跳跃。硬币根据角色向右移动的距离向左移动

完整代码
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入java.net。*;
导入java.awt.image.ImageObserver;
导入java.io.IOException;
导入javax.imageio.imageio;
公共类SideScroller扩展JPanel实现KeyListener{
公共静态void main(字符串args[])引发异常{
侧卷轴f=新侧卷轴(“侧卷轴”);
}
JFrame f=新的JFrame();
int x=0;
int y=0;
int k=10;
int j=50;
int字符y=351;
布尔值canJump=true;
布尔键按下[]=新布尔[3];
图像img;
图像特征;
硬币c=新硬币(x+500,y+350);
公共侧卷轴(字符串s)引发畸形的DurLexException,IOException{
img=ImageIO.read(新URL(“http://dl.dropbox.com/u/47632315/sideScrollerBG.png"));
character=ImageIO.read(新URL(“http://dl.dropbox.com/u/47632315/char.png"));
f、 片名;
//定义描述性常数时不要使用“幻数”!
//f、 设置默认关闭操作(3);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f、 可设置大小(假);
//最好在加载时询问。
//setPreferredSize(新尺寸(1000500));
setPreferredSize(新维度(1000,img.getHeight(this)));
f、 加上(这个);
f、 包装();
//通常有害,很少必要。
//f.设置布局(空);
//看起来像一个闪屏
//f、 setLocationRelativeTo(空);
//默认情况下位于平台,最好。
f、 setLocationByPlatform(真);
f、 addKeyListener(此);
getKeys();
//应该最后完成
f、 setVisible(真);
}
公共组件(图形g){
超级组件(g);
g、 绘图图像(img,x,y,this);
g、 drawImage(character,50,characterY,this);
Graphics2D g2d=(Graphics2D)g;
//这里,我们将图形对象“转换”到一个单独的位置
g2d.translate(x,0);
c、 油漆(g2d,本);
}
@凌驾
聚氨基甲酸酯
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.awt.image.ImageObserver;
import java.io.IOException;
import javax.imageio.ImageIO;

public class SideScroller extends JPanel implements KeyListener {

    public static void main(String args[]) throws Exception {
        SideScroller f = new SideScroller("Side Scroller");
    }

    JFrame f = new JFrame();
    int x = 0;
    int y = 0;
    int k = 10;
    int j = 50;
    int characterY = 351;
    boolean canJump = true;
    boolean keyPressed[] = new boolean[3];

    Image img;
    Image character;

    Coins c = new Coins(x + 500, y + 350);

    public SideScroller(String s) throws MalformedURLException, IOException {
        img = ImageIO.read(new URL("http://dl.dropbox.com/u/47632315/sideScrollerBG.png"));
        character = ImageIO.read(new URL("http://dl.dropbox.com/u/47632315/char.png"));

        f.setTitle(s);
        // don't use 'magic numbers' when descriptive constants are defined!
        //f.setDefaultCloseOperation(3);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(false);
        // Better to ask when loaded.
        //setPreferredSize(new Dimension(1000, 500));
        setPreferredSize(new Dimension(1000, img.getHeight(this)));
        f.add(this);
        f.pack();
        // usually harmful, rarely necessary.
//      f.setLayout(null);
        // Looks like a splash screen
        //f.setLocationRelativeTo(null);
        // located by platform default, best.
        f.setLocationByPlatform(true);
        f.addKeyListener(this);
        getKeys();

        // should be done last
        f.setVisible(true);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, x, y, this);
        g.drawImage(character, 50, characterY, this);
        Graphics2D g2d = (Graphics2D)g;
        // here we 'translate' the graphics object to a separate location  
        g2d.translate(x,0);
        c.paint(g2d, this);
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_ESCAPE) {
            System.exit(0);
        }
        if (keyCode == KeyEvent.VK_RIGHT) {
            keyPressed[0] = true;
        }
        if (keyCode == KeyEvent.VK_LEFT) {
            keyPressed[1] = true;
        }
        if (canJump) {
            if (keyCode == KeyEvent.VK_SPACE) {
                // better to use a javax.swing.Timer here
                new Thread(new Runnable() {
                    public void run() {
                        canJump = false;
                        for (double i = 0; i <= 5.1; i += .2) {
                            characterY = (int) (k * i * i - j * i + 351);
                            f.repaint();
                            System.out.println(characterY);
                            System.out.println(canJump);
                            try {
                                Thread.sleep(25);
                            } catch (InterruptedException e) {
                                System.err.println(e);
                            }
                        }
                        repaint();
                        canJump = true;
                    }
                }).start();
            }
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_RIGHT) {
            keyPressed[0] = false;
        }
        if (keyCode == KeyEvent.VK_LEFT) {
            keyPressed[1] = false;
        }
    }

    public void getKeys() {
        new Thread(new Runnable() {
            public void run() {
                while (true) {
                    if (keyPressed[0]) {
                        x -= 5;
                        repaint();
                    }
                    if (keyPressed[1]) {
                        if (x != 0) {
                            x += 5;
                            repaint();
                        }
                    }
                    try {
                        Thread.sleep(25);
                    } catch (InterruptedException e) {
                        System.err.println(e);
                    }
                }
            }
        }).start();
    }
}

class Coins extends pickUpObject {

    Image coin; 

    public Coins(int x, int y) throws MalformedURLException, IOException{
        super(x, y);
        super.x = x;
        super.y = y;
        coin = ImageIO.read(new URL("http://dl.dropbox.com/u/47632315/coin.png"));
    }

    public void paint(Graphics g, ImageObserver o){
        g.drawImage(coin, x, y, o);
    }
}

abstract class pickUpObject {

    int x, y;

    public pickUpObject(int x, int y){
    }

    public abstract void paint(Graphics g, ImageObserver o);
}