2014-10-04 2 views
0

저는 C#으로 2D 게임을 개발하고 싶었습니다. 자, 전에 이미 Java에서이 작업을 수행했지만 비슷한 구문을 사용하여 아무것도 찾을 수 없습니다.C# 2D 게임 엔진 개발

다음과 같이 내 자바 게임 엔진의 주요 게임 클래스 작동 :

package Main; 

import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.image.BufferedImage; 

import javax.swing.JPanel; 

import GameState.GameStateManager; 

public class GamePanel extends JPanel implements Runnable, KeyListener 
{ 
    //Dimensions 
    public static final int HEIGHT = 240; 
    public static final int WIDTH = 320;//(HEIGHT/9)*16;//360 
    public static final int SCALE = 3; 

    //Game Thread 
    private Thread thread; 
    private boolean running; 
    private int FPS = 60; 
    private long targetTime = 1000/FPS; 

    //Image 
    private BufferedImage image; 
    private Graphics2D g; 

    //Game State Manager 
    private GameStateManager gsm; 

    public GamePanel() 
    { 
     super(); 
     setPreferredSize(new Dimension(WIDTH*SCALE,HEIGHT*SCALE)); 
     setFocusable(true); 
     requestFocus(); 
    } 

    public void addNotify() 
    { 
     super.addNotify(); 
     if(thread == null) 
     { 
      thread = new Thread(this); 
      addKeyListener(this); 
      thread.start(); 
     } 
    } 

    private void init() 
    { 
     image = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB); 
     g = (Graphics2D)image.getGraphics(); 
     running = true; 
     gsm = new GameStateManager(); 
    } 

    public void run() 
    { 
     init(); 

     long start; 
     long elapsed; 
     long wait; 

     //Game loop 
     while(running) 
     { 
      start = System.nanoTime(); 

      update(); 
      draw(); 
      drawToScreen(); 

      elapsed = System.nanoTime() - start; 
      wait = targetTime - elapsed/1000000; 

      if(wait <= 0) 
      { 
       wait = 1; 
      } 
      try 
      { 
       Thread.sleep(wait); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 

    private void update() 
    { 
     gsm.update(); 
    } 
    private void draw() 
    { 
     gsm.draw(g); 
    } 
    private void drawToScreen() 
    { 
     Graphics g2 = getGraphics(); 
     g2.drawImage(image, 0, 0, WIDTH*SCALE, HEIGHT*SCALE, null); 
     g2.dispose(); 
    } 

    public void keyTyped(KeyEvent key){} 
    public void keyPressed(KeyEvent key) 
    { 
     gsm.keyPressed(key.getKeyCode()); 
    } 
    public void keyReleased(KeyEvent key) 
    { 
     gsm.keyReleased(key.getKeyCode()); 
    } 
} 

밖에 엔진 개발에 어떤 괜찮은 자습서가 있습니까? 그리고 거기에 C#에서 위의 코드를 구현할 수있는 방법이 무엇입니까? 미리 만들어진 엔진을 사용하지 않으려합니다.

미리 감사드립니다.

답변

1

MonoGame을 사용해 보시기 바랍니다. XNA의 오픈 소스 구현이며, 중단되었습니다. Java 코드와 비슷하게 매 사이클마다 실행되는 메인 게임 루프 및 메소드가 있으므로, 처음 시작하는 경우에는 포팅하기가 어렵지 않습니다. MonoGame은 오픈 소스 및 크로스 플랫폼이라는 점에 유의할 가치가 있습니다.

+0

가능하면 미리 만든 게임 엔진을 사용하지 않는 것이 좋습니다. – GenericMadman

+0

@GenericMadman 미리 만들어진 게임 엔진이 아니므로 엔진을 직접 작성할 수있는 프레임 워크와 비슷합니다. –

+0

대단히 감사합니다. :) – GenericMadman