You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中使用Graphics2D与paint()?2D游戏开发求助

解决Kotlin中Graphics2D类型转换问题

你遇到的核心问题是错误地尝试直接实例化抽象类Graphics2D——这在Java里也是不允许的,正确做法是对传入的Graphics对象做强制类型转换。在Kotlin中,类型转换使用as关键字,同时可以结合智能转换简化代码。

修正后的paintComponent方法

将你代码里的错误行替换为:

override fun paintComponent(g: Graphics) {
    super.paintComponent(g)
    val g2 = g as Graphics2D
    // 这里可以使用g2进行2D绘制操作,比如:
    // g2.color = Color.WHITE
    // g2.drawRect(10, 10, 50, 50)
    g2.dispose() // 记得释放绘图资源
}

额外的代码优化建议(针对新手)

  1. 用val替代不必要的var:对于不需要重新赋值的变量(比如originalTileSize、scale等),用val声明更符合Kotlin不可变编程的习惯,避免意外修改:

    val originalTileSize = 16
    val scale = 3
    val tileSize = originalTileSize * scale
    val maxScreenCol = 16
    val maxScreenRow = 12
    val screenWidth = maxScreenCol * tileSize
    val screenHeight = maxScreenRow * tileSize
    
  2. 修复游戏循环逻辑:你当前run方法中的while (gameThread != null)会导致无限循环(gameThread永远不会被置为null),建议改为检查线程存活状态:

    override fun run() {
        while (gameThread.isAlive) {
            update()
            repaint()
            // 添加休眠控制帧率,比如60帧:
            Thread.sleep(16)
        }
    }
    
  3. 简化线程初始化:startGameThread方法可以简化,无需提前初始化gameThread变量:

    fun startGameThread() {
        gameThread = Thread(this)
        gameThread.start()
    }
    

内容的提问来源于stack exchange,提问作者danny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:13:21