M5 Stack 제작 게임 001

11398 단어 m5stackgamedevtech

주의


개발 환경 정비와 창고 도입 방법 등은 여기서 언급하지 않는다.용서해 주세요.

문장 요약


gooblib, goblib M5Stack 실행 게임m5s로 구축.
어느 정도의 프로그램 지식, M5 Stack에 대한 지식이 필요합니다.

M5 Stack과의 공동 멍에?


M5Stack는 M5 Stack사의 소형 마이크로컴퓨터 모듈로 다양한 유형의 제품을 판매했다.
이곳에서는 가장 기본적인 M5 Stack BASIC/Gray+Faces Bottom+Gamepad Panel 구성에 따라 게임을 제작할 예정이다.

게임패드 패널에는 십자 키와 A/B 키, SELECT/START 키가 있어 게임보이에 해당하는 조작을 할 수 있다.

M5 Stack 성능 요약


16bitRGB 컬러 LCD(해상도 320x240), 스피커 탑재, SD 카드 읽기와 쓰기 능력으로 게임 제작에 필요한 기능을 충족시킨다.
그러나 하드웨어가 전혀 없는 BG와 sprite 등의 묘사, 3D 연관 기능 등 게임 전용기에 탑재된 기능.소리계 이외에도 마찬가지로 기본적으로 자신이 반드시 방법을 강구해서 전부 해결해야 하는 그런 하드웨어이다.
낡은 8비트 개인용 컴퓨터나 PC-9001 시리즈의 게임 개발과 비슷한 느낌이라고 볼 수 있다.(또한, 필자는 그 시대의 개발 경험이 있는 노인이다(´/ω・`) )

언어 개발


개발 환경에서 첨부 파일을 사용하는 컴파일러 클래스는 C++11 이후를 전제로 합니다.

프로그램 라이브러리, 코드 사용


게임용 프레임은 아마 존재하지 않을 것이다.
그래서 몇 개의 라이브러리와 자체 라이브러리를 조합한다.

기본적


M5 Stack을 제어하는 다양한 기본 라이브러리M5Stack가 있습니다. 여기를 사용하세요.

그리다


당초 예전처럼 기본적인 갤러리를 만들려고 했는데, M5 Stack 인근에는 다양한 사람들이 다양한 프로그램 라이브러리를 발표했다.그중에 흰 눈썹LovyanGFX이라고 할 수 있다.
내가 원하는 기능을 충족시키고 성능도 좋은 프로그램 라이브러리로 각종 실험의 결과를 얻어 그림을 그렸다.(LovoyanGFX는 BSD 라이센스 2개

소리


이것M5UnifiedSpeaker Class이 있는데 소리가 재생될 때 소음이 줄어드는 것을 제외하고는 기능 성능이 충분하다.
그러나 M5 Unified를 사용하면 위의 M5 Stack과 충돌하고 SD카드에서 흘러나오는 재생과 관련이 있기 때문에 이 부분의 코드를 자작 라이브러리에 가져와 개조하여 사용한다.(M5 Unified 예 MIT 라이센스

SD 카드


M5 Stack의 프로그램 라이브러리에서도 SD 카드에 접근할 수 있지만 몇 가지 버전의 문제가 있어 채택했다SdFat.(SdFat은 MIT 라이센스)

자체 제작 라이브러리


MIT 라이센스로 공개 중입니다.

goblib


고대의 자작고와 코드군에서 발굴해 정비·개량한 것이다.
이것은 하드웨어에 의존하지 않는다.

goblib_m5s


M5 Stack 종속 라이브러리.

응용 프로그램 클래스의 주 순환


LovoyanGFX의 샘플에 이식된 MovingIcons를 시험해 보세요.
https://github.com/lovyan03/LovyanGFX/tree/master/examples/Sprite/MovingIcons
고블립은 이른바 게임 순환App class을 포함하고 있기 때문에 이 사용을 계승한다.
또 M5Stack에서 게임을 실행하면 30FPS 고정 부근이 적당하다.

M5.begin


M5.begin(false /* LCD */, false /* SD */ , true /* Serial */);
LCD 연관성은 LovoyanGFX, SD카드 연관성은 SdFat에 맡기기 때문에 M5.Begin에서는 LCD 및 SD 관련 초기화 등을 수행하지 않습니다.
(이번에는 SD 카드를 사용하지 않습니다.)

goblib::App


물려받다


응용 프로그램 종류도 단식으로 정의된다.다중 상속이란
#define MAX_FPS (30)
using AppClock = std::chrono::steady_clock;
class m5s_app : public goblib::App<AppClock, MAX_FPS, MAX_FPS>, goblib::Singleton<m5s_app>{...};

goblib::App::fixedUpdate()


구성원 함수는 템플릿 매개 변수로 지정된 FPS에 따라 1초 동안 지정된 횟수를 실행하도록 노력합니다.
처리 지연이 누적 지연 시간을 누적하면 프레임워크에서 여러 번 호출되어 제거될 수 있습니다.
이것은 일정한 간격으로 부르는 것과 유사한 행위를 초래할 수 있다.
Unity에 가까운 픽셀 업데이트라고 볼 수 있는 물건입니다.

goblib::App::update(const float delta)


프레임마다 fixedUpdate() 다음에 구성원 함수라고 부릅니다.매개 변수델타를 사용하여 각종 교정을 할 수 있습니다.

goblib::App::render()


프레임마다 업데이트 () 다음에 호출되는 구성원 함수입니다.
업데이트 () 의 처리에 따라 그리기 처리하지만 임의로 처리할 수도 있습니다.

goblib::App::sleep_until(const std::chrono::time_point<AppClock, UpdateDuration>& abs_time)


fixedUpdate(, update(), render()를 호출한 후 구성원 함수는 FPS를 고정시키기 위해 지정된 절대 시간까지 기다립니다.
M5 Stack에서 std:thread:sleepuntil()/sleep_for ()의 설치가 거칠기 때문에 다시 쓰기를 진행하십시오. 대기 정밀도가 더 높습니다.
gob_app.hpp
GOBLIB_INLINE virtual void sleep_until(const std::chrono::time_point<Clock, UpdateDuration>& abs_time)
{
    std::this_thread::sleep_until(abs_time);
}
app.hpp
virtual void sleep_until(const std::chrono::time_point<AppClock, UpdateDuration>& abs_time) override
{
    auto us = std::chrono::duration_cast<std::chrono::microseconds>(abs_time - AppClock::now()).count();
    auto ms = us > 0 ? us / 1000 : 0;
    delay(ms);
    while(AppClock::now() < abs_time){ taskYIELD(); }
}
각 비교는 다음 이미지를 참조하십시오.std::thread::sleep_until을 사용하면 FPS가 떨어집니다.
std::thread::sleep_until
override

코드


MovingIcons 아이콘을 이동하는 부분을 업데이트()로 이동하고, 그리는 부분을render()로 이동하여 goblib:App을 기반으로 조작한다.
https://github.com/GOB52/M5S_games/tree/master/m5s_app

감사의 말


훌륭한 도서관을 만들어 주신 여러분과 다양한 조언을 해 주신 여러분께 감사드립니다.
Have a happy coding :)

좋은 웹페이지 즐겨찾기