zoukankan      html  css  js  c++  java
  • 手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏06加载游戏背景

    游戏背景

    Background.java

    package world;
    
    
    import sprite.Sprite;
    
    import java.awt.*;
    
    public class Background {
    	private Sprite _background;
    	private Sprite _cloud;
    
    	public Background(){
    		_background = new Sprite("res/background/level1.png");
    		_cloud = new Sprite("res/background/level1_back.png");
    		_background.translate(-900, 120);
    		_cloud.translate(0, 120);
    		_background.scale(2, 2);
    		_cloud.scale(2, 2);
    	}
    	
    	public void update(Graphics2D g){
    		_cloud.show(g);
    		_background.show(g);
    	}
    
    }
    

    level1.png(1026256)放大2倍后(2052512)
    level1_back.png(513240)放大2倍后(1026480)
    我们的屏幕大小是:(640*480)

    DisplayMode(640, 480, 32, 0)
    

    我们先来看一下水平方向(x轴方向)

    _background.translate(-900, 120);
    

    level1.png被向左平移了900个像素,还剩下2052-900=1150个像素,大约是640的2倍。

    _cloud.translate(0, 120);
    

    level1_back.png被直接放到了x=0的点,还剩下1026像素,大约是640的2倍。

    level1.png和level1_back.png覆盖在了一起,构成了最终的背景效果。
    将来随着player的向右移动,背景会向左平移,造成一种player向前走的效果。
    将来,我们会另外准备2张背景图片,交替反复的贴到屏幕上。

    再来看一下垂直方向(y轴方向)

    _background.translate(-900, 120);
    _cloud.translate(0, 120);
    

    屏幕高度是480,背景图片高度240,我们先移动到偏移120的位置,然后放大2倍,垂直方向上正好填满整个屏幕。

    主窗体加载背景

    public GameApp(){
    		try{
    
    			background = new Background();
            ......
    }
    
    	private void _gameLoop(){
            background.update(g);
            ......
    }
    

    如果您迷路了,请参考完整源码:

    项目源码

    项目源码

  • 相关阅读:
    [].copyWithin.call({length:5,3:1},0,3)
    url、 src 和href 标签的区别
    http请求方法(GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT)
    windows环境下配置webpack
    typeof作用
    行内块之间存在间隙
    “DllRegisterServer的调用失败”问题解决办法
    SQL Server集群服务器的优缺点
    UTF8转成GB2312乱码问题解决思路
    什么是RFID技术
  • 原文地址:https://www.cnblogs.com/songboriceboy/p/15788646.html
Copyright © 2011-2022 走看看