2015-07-19 54 views
0

我是一个相当新的程序员,我正在尝试使用Java创建一个非常基础的游戏,您只需在屏幕上移动一个精灵。到目前为止,我完成的工作是创建一个SpriteSheet类,它加载到我的精灵表中,并将Spritesheet的BufferedImage保存为该类的字段,并将Sprite类从该字段中获取子图像(精灵本身)并保存作为Sprite类中的一个字段。我已经测试过它,它的一切工作都应该如此。我明白,这可能不是典型的或“正确的”,有效的做事方式。我可以自己搞清楚,但我现在的问题是理解BufferedImage,Graphics和Canvas之间的关系。我看到一个教程,其中一个人将他的精灵保存为一个BufferedImage,并用它来创建一个Graphic。然后,他将此图形绘制到画布上,并将画布添加到他的JFrame中。他还在某种程度上与他的图形相关联,并且我完全不理解BufferStrategy。每当我尝试为我的目的调整他的方法时,它都不会起作用。我已经无数次地浏览了javadocs这些东西,并且我单独获得了它们,但我似乎无法理解它们如何组合在一起来实现我的目标。BufferedImage,Graphics和Canvas之间的关系游戏

简而言之:任何人都可以解释BufferedImage,Graphics和Canvas如何在显示2D游戏的精灵的上下文中一起使用,以及如何使用BufferStrategy?适当和相关的方法?这种方法适用于渲染移动的精灵大约15 fps吗?等等......我的问题不是来自缺乏研究或缺乏必要的知识,而是缺乏理解。

非常感谢你和任何建议,非常感谢!

+0

也许你应该开始由具有厕所k在[Canvas的JavaDocs](http://docs.oracle.com/javase/7/docs/api/java/awt/Canvas.html),['BufferStrategy'](http:// docs。 oracle.com/javase/7/docs/api/java/awt/image/BufferStrategy。html)和[BufferStrategy and BufferCapabilities](https://docs.oracle.com/javase/tutorial/extra/fullscreen/bufferstrategy.html),对于一些示例 – MadProgrammer

+0

哦,一般来说,这与Swing以及更多用AWT做;) – MadProgrammer

回答

1
  • BufferedImageImage型,其具有能够从代码中修改的能力,但,它没有手段通过其可以绘制它自我到屏幕上。
  • Canvas是一个AWT(重量级)容器,通常用于通过它的BufferStrategy提供激活绘画访问。这显示在屏幕上。
  • Graphics是一个抽象的图形库,旨在使它更容易执行跨平台渲染。

Canvas,通过它的BufferStragegy提供了访问Graphics实例,它允许你画的Canvas(通过扩展,屏幕)。您可以使用此Graphics背景画的BufferedImage

一个Canvas本身不能在屏幕上显示出来,必须首先将包含某种类型的窗口内,像java.awt.Frame

基本上,帧示出了用户的Canvas,所述Canvas经由BufferStrategyGraphics上下文提供访问图形硬件和BufferedImage提供了可涂到Graphics上下文的图像/图像数据的一般表示(的Canvas

也许你应该开始由具有看JavaDocs for CanvasBufferStrategyBufferStrategy and BufferCapabilities2D Graphics的一些例子

+0

谢谢我给那些看看。这有很大帮助。我的主要问题是试图将我的BufferedImage保存为Graphics对象。 – heavyGLOW

+0

['Graphics#drawImage'](http://docs.oracle.com/javase/7/docs/api/java/awt/Graphics.html#drawImage(java.awt.Image,%20int,%20int,% 20java.awt.image.ImageObserver)),[2D图形,绘制图像](https://docs.oracle.com/javase/tutorial/2d/images/drawimage.html)... – MadProgrammer

+0

所以这就是我聚集:你创建一个画布。用那个画布创建一个缓冲策略。从该缓冲区策略中,您可以创建一个图形对象。然后使用该图形对象,你可以使用传递到我的bufferedImage作为参数的drawImage方法来绘制图像? – heavyGLOW