이번에는 입력을 담당하는 Input Class를 살펴볼 것이다.

Input Class를 만든다.


(Input의 private)


입력에 관한 변수들이다.

public의 함수들을 볼 것이다.



(생성자)


생성자에서는 기초적인 초기화 작업을 진행한다.
키가 눌렸는지에 대한 배열 초기화와 버퍼 초기화, 마우스 정보 변수 초기화를 진행한다.
(* 컨트롤러에 대한 것은 Xbox 컨트롤러를 위한 것이다. 책에 포함되어있는 내용이지만, 나는 Xbox에 관한 설명은 건너 뛸 것이다.)



(소멸자)


Input 클래스가 삭제 될 때 마우스가 캡쳐상태라면 캡쳐 상태를 해제 해준다.

다음은 Input 클래스의 초기화 함수이다.



(초기화 함수)


초기화 과정에서 마우스를 캡쳐 상태로 설정시켜준다.
그리고 그 아래의 코드들은 고정밀 마우스 데이터를 가져오는 작업이다.

이제부터 입력에 관한 함수들이 나온다.


(키 눌림 안눌림)


키가 눌렸는지 안눌렸는지 체크하는 함수이다.
keyDown에서는 키가 눌렸으면 keysDown과 keysPressed 배열의 해당 index에 가서 true로 만들어준다. keysDown은 현재 눌렸는지 확인하는 것이다. 그리고 keyPressed는 현재 게임 루프가 실행되는 동안 눌렸었는지를 체크하기 위한 배열이다.

  따라서 keyUp함수에서는 keysDown만 false로 해준다.



(키 입력)


키 입력에 관한 함수이다. 




(키 체크)


isKeyDown은 현재 키가 눌렸는지 확인하는 함수이고 keysDown 배열을 확인한다.
wasKeyPressed는 현재 루프동안 키가 눌린 경험이 있는지 체크하므로 keysPressed 배열을 확인한다.
그리고 어떤 키든 눌렸었는지 체크하기 위한 함수 anyKeyPressed 함수도 추가해주었다.



(입력 초기화)


입력에 대한 초기화 함수이다. 초기화가 위에서 만든 initialize 함수와 다르다. 단순히 입력에 대한 초기화를 하는 것이다. 

  다음은 입력 중 마우스입력에 관한 함수들이다.



(마우스 입력)


mouseIn 함수로 마우스의 좌표를 가져오고, mouseRawIn을 사용해 마우스의 변화량을 가져온다.
mouseWheelIn으로 마우스 휠 정보를 가져온다.


(* 참조 - 2D 게임 프로그래밍, 찰스 켈리)


파일을 입력, 출력을 다루는 클래스가 JAVA에 존재한다.

InputStream으로 파일 스트림을 받을 수 있는데

이를 이용해서
먼저
간단한 파일 복사 프로그램을 작성해본다.



(파일 복사 코드)




(복사된 화면)



위 코드는 파일을 복사하는 프로그램이다.

InputStream과 OutputStream을 이용해 작성해보았다.

InputStream 과 OutputStream는 한바이트씩 읽고 쓴다.
그렇기 때문이 이 코드를 직접 사용하기에는 성능면에서 문제가 있다.

만약 버퍼를 이용하면 성능을 높일 수 있게 된다.


(버퍼를 이용한 코드)



위처럼 1KB 버퍼를 이용해 옮기는 코드 모습이다.

그러면
InputStream을 이용해 정수형 int 자료형에 데이터를  담을 수 있을까?

스트림 데이터를 int 자료형으로 옮겨야하는데
그러기 위해서는
필터 스트림이 필요하다.

필터 스트림이란 스트림을 받아오는 과정에서 원하는 형태로 가공하기 위한 것이다.
말그대로 필터이다.

필터 스트림에는 InputStream이나 OutputStream의 기능은 없다.
필터이기 때문에 같이 사용하여야 한다.



(필터 스트림 적용)




(출력 화면)



위 코드는 필터 스트림을 적용한 코드이다.

그렇다면 이 코드 역시 버퍼를 적용 시킬 수 있지 않을까?



(버퍼를 적용한 코드)



위는 BufferedOutputStream 클래스를 이용해 버퍼를 이용한 코드이다.

OutputStream을 생성하고 그 참조변수를 BufferedOutputStream인자로 넘겨주고
그 인자를 DataOutputStream으로 연결해준다.

이 순서는 중요하다.

그러면 파일에 직접 입력을 해볼 것이다.

파일에 직접 입력하기 위해서는 문자스트림이 필요하다.
문자스트림은 다양한 운영체제에서도 똑같이 적용시키기 위해서
필요하다. 문자데이터를 입력받아 각 운영체제에 맞게 인코딩이 필요하기 때문이다.

- FileReader, FileWriter

클래스만 달라졌지 역할은 위에서 본것과 같다.

메모장에 입력하는 코드를 만들어보겠다.




(파일 입력 코드)






(출력 화면)



메모장에 문자가 입력된 것을 확인할 수 있다.

객체 또한 파일처럼 입력할 수 있다.

클래스 이름은
ObjectOutputStream , ObjectInputStream이다.
파일입력처럼 객체를 저장해 파일의 데이터처럼 꺼내서 사용할 수 있다.



(객체 입력)




(*참조 - 난 정말 JAVA를 공부한 적이 없다구요, 윤성우)




+ Recent posts