보통 getchar() 함수를 이용해서 문자를 입력받는다. 문제는 이게 엔터를 누르기 전에는 입력이 바로 되질 않는다는 것이다. 보통은 문제가 안 되는데 현재 콘솔 게임을 만들고 있다보니까 이게 문제가 되었다. 찾아보니 단순히 C 레벨에서의 문제가 아니라 터미널과의 깊은 연관성을 가진 문제라나.... 어쨌든 문제 해결은 해야하니까 찾아보니까 어떤 용자가 함수를 공유해뒀다. 링크 #include #include #include int mygetch() { struct termios oldt, newt; int ch; tcgetattr( STDIN_FILENO, &oldt ); newt = oldt; newt.c_lflag &= ~( ICANON | ECHO ); tcsetattr( STDIN_FILENO,..
웹 개발을 하다보면 비밀번호를 안전하게 저장해야한다. 일반적으로 해싱을 통해 이것을 해결하는데 단순 해싱의 문제점이 있다. 바로 동일한 문자열을 해싱했을 때 동일한 결과값이 나온다는 점이다. 만약 DB가 유출되었을 때 password의 해시값을 통해 원본 값을 얻어내긴 힘들겠지만, 비밀번호가 같다는 것을 알 수 있게 되므로 큰 문제다. Python에서는 암호화를 위해 pycrypto라는 라이브러리를 많이 사용한다고 한다. 실제로 github에서도 많이 starred 되어 있다. 하지만 나는 bcrypt를 추천하고 싶다. 특히 Flask-Bcrypt. 일단 사용법이 정말 간단하고 쉽다. 알아둬야 할 함수는 두 개 뿐일정도다. 하지만 가장 큰 이유는 Flask-Bcrypt를 통해 암호화 된 결과값이 저장하기..
이건 C#에 좀 더 가까운 내용.... C#에서는 기본적으로 EventArgs, EventHandler라는 클래스를 제공한다. 이 녀석을 활용해서 가독성 좋게 Event Driven Programming을 할 수 있다. 게임에서 라운드 개념을 도입한다고 생각해보자. 라운드가 증가될 때마다 오브젝트들이 변경되어야 할 것이다. 이걸 좀 예쁘게 구현하고 싶다.다양한 방법이 있겠지만 위에서 언급한 EventArgs 클래스, EventHandler 클래스를 이용한 방법으로 구현해보자. EventHandler는 List와 비슷한 방법으로 생성할 수 있다. List의 type에는 제한이 없지만 EventHandler에는 EventArgs 클래스만이 들어갈 수 있다. 즉, EventArgs 클래스를 상속받은 클래스를 ..
비행기 도그파이팅 게임을 만들다보면 적 위치에 맞춰서 표적 마크를 보여줘야 한다. 안 그러면 잘 안 보이니까.... 표적 마크가 적의 위치에 따라서 바뀌는걸 여러가지 방법으로 구현할 수 있다. 적 오브젝트의 자식으로 추가해두는 것이 한 가지 방법. 그러나 3D 객체가 자유자재로 움직이는 상황에서 그대로 2D UI가 유지되도록 하는 것은 귀찮기도 하고 또 효율도 별로라서 다른 방법을 생각했다. 필요한건 플레이어의 카메라와 적의 게임오브젝트, UI 정보. 이것들이 있으면 UI가 그려져야 할 위치를 계산할 수 있다. 나는 UI를 그리기 위해 NGUI를 사용하기로 했다. Camera의 WorldToViewport 행렬을 이용해서 Viewport 상에서의 위치를 계산하고 이것을 NGUI의 좌표계로 변환하는 것이다..
Unity에서 AssetBundle을 쓸 일이 생겼는데, 그 중에서도 특히 Scene AssetBundle에 관심이 생겨서 몇 가지 테스트를 해봤다. 원래 Unity에서 Scene을 로드할 때는 Application.LoadLevel을 통해서 하는데, 원래는 Build Setting에서 Scene을 추가해줘야 한다. 그런데 AssetBundle을 이용하여 Scene을 실행할 때는 어떻게 해야하는지에 대한 설명이 빈약하다. 보통 예제들을 보면 AssetBundle을 WWW를 통해 다운로드 받은 뒤, www.assetBundle.LoadAll()을 한다. 그런데 직접 테스트 해 본 결과, LoadAll을 하지 않아도 LoadLevel을 하는데 문제가 없다. Application.LoadLevel의 인자로 넣..
루비 언어도 모르고, RoR은 당연히 모르고, 그 외 사용하는 프레임워크들을 전부다 모르는 상태에서 이걸 하려고 하니 정말 삽질을 많이 했다.사실 코드 자체는 정말 심플한데 구조를 잘 모르다보니 뭐가 어떻게 돌아가는지 몰라서 더 삽질을 심하게 했던 것 같다. 일단 환경은 다음과 같다.RoR로 API 서버가 돌아간다. URL 라우팅 같은건 RoR을 쓰는게 아니라 Grape라는 semi-framework를 사용한다. 파일을 저장할 때 로컬에 저장하는게 아니라 AWS S3에 저장하려고 한다. 0. 라이브러리 추가# Image Uploadgem 'paperclip', '~> 4.2'# AWSgem 'aws-sdk' Gemfile에 위 내용을 추가하고 'bundle install'을 해준다.paperclip 버전..
기기에 하드웨어 버튼(맞는 표현인지 모르겠지만)이 있으면 하드웨어 메뉴 버튼을 이용하게끔 되어 있어서 액션바에 메뉴버튼이 보이지 않는 경우가 발생한다. 항상 액션바에 띄우고 싶으면 다음과 같은 코드를 넣으면 된다. 나는 액티비티의 onCreate 메소드 안에 넣었다. try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if (menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false..
맥에서 GL 프로그래밍을 할 때 보통은 XCode을 쓴다. 근데 나는 XCode가 정말 너무 싫어서 대안을 계속 찾아댔다. XCode가 아무리 싫어도 텍스트 에디터만으로 코딩하는건 생산성이 너무 별로라 -_-;; Eclipse CDT 같은 대안도 있지만 썩 맘에 들진 않았다. Eclipse CDT는 사실 그렇게 나쁘지 않은 편인데 뭔가 이상하게 정이 안 가서...그러다 이번에 제트브레인에서 새로 출시한 CLion을 보고 맘에 들어서 한 번 삽질을 해 봤다. 일단 기본적으로 XCode에서는 OpenGL 같은걸 쓸 때 Framework를 추가하는 것으로 쉽게 쓸 수 있다. 그냥 build setting에서 framework 추가만 해주면 되니깐... 근데 CLion에서는 이 framework를 직접 추가해줘..
- Total
- Today
- Yesterday