Hi almal. Vandag sal ons sien hoe om 'n projek voor te berei deur die sdl2-biblioteek te gebruik om die speletjie op Android te laat loop.
Eerstens moet jy Android Studio aflaai, dit installeer en alles wat nodig is in hierdie ontwikkelingsomgewing. Byvoorbeeld, ek het tans Kde Neon, en daar is 'n /etc/environment lΓͺer op hierdie stelsel, dieselfde lΓͺer bestaan ββin ubuntu. Daar is dit nodig om sulke veranderlikes te registreer.
ANDROID_HOME=/home/username/Android/Sdk
ANDROID_NDK_HOME=/home/username/ndk
U moet ook die NDK van die amptelike webwerf aflaai, dit na u tuisgids uitpak en dit na NDK hernoem. Vervolgens moet u die SDL2-biblioteek van die webwerf aflaai
Om lΓͺers in Android vanaf bates te lees, moet jy die SDL_RWops-funksies gebruik. Hier is 'n voorbeeld van die gebruik daarvan in kode om met 'n lettertipe te werk. In hierdie geval kan ons nie FT_New_Face gebruik nie, maar in plaas daarvan sal ons FT_New_Memory_Face gebruik om die data wat reeds gelees is, te gebruik.
#ifdef __ANDROID__
snprintf ( path, 254, "fonts/%s", file );
SDL_RWops *rw = SDL_RWFromFile(path, "r" );
char *memory = ( char * ) calloc ( rw->hidden.androidio.size, 1 );
SDL_RWread(rw, memory, 1, rw->hidden.androidio.size );
FT_New_Memory_Face(*this->ft_library, ( const FT_Byte * )memory, rw->hidden.androidio.size, 0, &this;->face );
SDL_RWclose(rw);
free ( memory );
#else
snprintf ( path, 254, "%s/fonts/%s", DEFAULT_ASSETS, file );
if ( access ( path, F_OK ) ) {
fprintf ( stderr, "not found font: %sn", path );
exit ( EXIT_FAILURE );
}
struct stat st;
stat ( path, &st; );
FILE *rw = fopen ( path, "r" );
char *memory = ( char * ) calloc ( st.st_size, 1 );
fread ( memory, 1, st.st_size, rw );
FT_New_Memory_Face ( *this->ft_library, ( const FT_Byte * ) memory, st.st_size, 0, &this;->face );
fclose ( rw );
free ( memory );
#endif
Ek het ook 'n koplΓͺer geskep om SDL2-opskrifte aan te sluit. NO_SDL_GLEXT word vereis vir samestelling om vir Android te slaag.
#ifdef __ANDROID__
#include "SDL.h"
#include "SDL_video.h"
#include "SDL_events.h"
#define NO_SDL_GLEXT
#include "SDL_opengl.h"
#include "SDL_opengles2.h"
#else
#include <SDL2/SDL.h>
#include <SDL2/SDL_video.h>
#include <SDL2/SDL_opengl.h>
#include <SDL2/SDL_opengles2.h>
#endif
So die projek is gereed, shaders is gereed vir Opengl Es 3.0. Nou moet ons 'n Android-projek skep. Om dit te doen, pak die argief SDL2 uit. Gaan na bou-skrifte. En ons doen so.
./androidbuild.sh com.xverizex.test main.cpp
Hierdie boodskap sal verskyn.
To build and install to a device for testing, run the following:
cd /home/cf/programs/SDL2-2.0.10/build/com.xverizex.test
./gradlew installDebug
Gaan na com.xverizex.test. Gaan na com.xverizex.test/app/jni/src. Kopieer jou speletjieprojek. En ons verander die Android.mk-lΓͺer, in my geval lyk dit so.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main
SDL_PATH := ../SDL
FREETYPE_PATH := ../Freetype2
LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include $(LOCAL_PATH)/$(FREETYPE_PATH)/include
# Add your application source files here...
LOCAL_SRC_FILES := ./engine/lang.cpp ./engine/actor.cpp ./engine/sprite.cpp ./engine/shaders.cpp ./engine/box.cpp ./engine/menubox.cpp ./engine/load_manager.cpp ./engine/main.cpp ./engine/font.cpp ./engine/model.cpp ./engine/button.cpp ./theme.cpp ./level_manager.cpp ./menu/menu.cpp
LOCAL_SHARED_LIBRARIES := SDL2 Freetype2
LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog
include $(BUILD_SHARED_LIBRARY)
Soos jy dalk opgemerk het, sluit ek ook die Freetype2-biblioteek in. Ek het 'n klaargemaakte een op github vir Android gekry, maar dit het nie gewerk nie, ek moes iets verander. Ons skep ook die toepassing/src/hoof/bates-gids. Ons sit ons hulpbronne daarin (lettertipes, sprites, 3D-modelle).
Kom ons stel nou Freetype2 vir Android op. Laai van my github af
Bron: will.com