小编tob*_*bes的帖子

如何在MVC 2D游戏中处理对象的图形表示?

我正在使用MVC模式在java中制作2D游戏,在阅读并搜索我的屁股之后,我仍然没有找到令人满意的安装,我应该如何处理对象的图形表示.

我应该将每个对象,例如Player分为PlayerModel(存储在Model中)和PlayerView(存储在View中)吗?

那似乎有点混乱,因为我必须跟踪哪个grapical-representation-object,即"ScaryMonsterEnemyView"连接到哪个逻辑表示对象,"ScaryMonsterEnemyModel".根据MVC,这真的是我应该怎么做的吗?如果是这样,这个连接应该存储在哪里?在视图中?

我知道这可能是一个愚蠢的问题,但我想从一开始就尽可能多地获得.谢谢你的帮忙:)

java model-view-controller

8
推荐指数
1
解决办法
895
查看次数

奇怪的图形错误:组件A的副本涂在组件B上.帮助!(Java)的

我做了一个简单的绘画程序,你可以使用画笔工具绘制一些不同的颜色并擦除(只需涂上白色).

它工作正常,但我有一个非常奇怪的图形错误,导致工具面板和最后一个鼠标悬停的颜色/工具图标绘在绘图面板的顶部.

实现:该框架包含两个JPanel扩展:ToolPanel和DrawPanel.ToolPanel拥有两个JPanel,它们包含颜色和工具按钮.按钮是JComponent的扩展.

链接到屏幕截图(我不允许发布图像):

在此输入图像描述

注意:第二个"假"工具面板中的按钮不是可以点击的实际按钮,我可以在它上面绘画.如果我在左角的"假"颜色按钮上绘画,当我鼠标悬停一个新颜色并用鼠标进入绘图面板时,它将再次重新绘制.

注意2:我曾经有一个JMenuBar,它也被绘在了drawpanel上.每次在窗口(不仅仅是面板)失去焦点一次后,拉伸面板被重新绘制.

一些代码:(我知道工具选择实现不是最好的:P)

DrawPanel的paintComponent方法:

    public void paintComponent(Graphics g) { 
    if(isMousePressed) {
        if(tool == "BRUSH") {
            g.setColor(color);
            g.fillOval(currentEvent.getX(), currentEvent.getY(), 30, 30);
        } else if(tool == "ERASER") {
            g.setColor(getBackground());
            g.fillOval(currentEvent.getX(), currentEvent.getY(), 30, 30);

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我遗漏了任何相关信息或代码,请告诉我.

假设:我没有在DrawPanels paintComponent-method中调用super.paintComponent,这可能会导致一些问题?我不这样做的原因是,如果我这样做,它将一直重新绘制背景,因此只有我最后绘制的点才会可见.不确定超级调用是否实际解决了问题,或者假面板是否也被背景覆盖.也许我需要以其他方式解决这个问题?或者是别的什么?

谢谢!

java graphics swing paintcomponent

5
推荐指数
1
解决办法
623
查看次数