從零開始-邊學邊做-塔防遊戲-七彩三國(五)--SDL項目

第四章:SDL項目


SDL應該比cocos2d-x更底層。在學習cocos2d-x之前。想把“七彩三國”的遊戲用SDL來簡單實現下吧。


首先創建一個項目,我們命名爲 SanguoSDL.創建的步驟見上一章。

C:\data\www\SanguoSDL

修改

C:\data\www\SanguoSDL\build.xml

C:\data\www\SanguoSDL\AndroidManifest.xml

中的 “SDLActivity” -> "SanguoSDL"

同時將SDL2,SDL2_image添加到項目中來

新建一個java類,繼承SDLAcitivity

C:\data\www\SanguoSDL\src\cn\skypark\SanguoSDL.java

代碼如下:

package cn.skypark;

import org.libsdl.app.SDLActivity;

public class SanguoSDL extends SDLActivity {

	public SanguoSDL() {
		// TODO Auto-generated constructor stub
	}

}


cd /cygdrive/c/data/www/SanguoSDL/jni
cp /cygdrive/c/data/software/SDL2_image-2.0.0/SDL2_image-2.0.0 SDL_image -rf     
cp /cygdrive/c/data/software/SDL2-2.0.1/SDL2-2.0.1 SDL -rf
chmod a+wr SDL_image/ -R   
chmod a+wr SDL/ -R   


最終目錄結構如下:


同時創建了一個打日誌的類。從LogCat可以看到,程序已經在模擬器中成功運行。

附上幾個主要文件的詳細代碼:

C:\data\www\SanguoSDL\src\cn\skypark\SanguoSDL.java

package cn.skypark;

import org.libsdl.app.SDLActivity;

import android.os.Bundle;

public class SanguoSDL extends SDLActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

}

C:\data\www\SanguoSDL\jni\skypark_game\SkyparkLog.hpp

#ifndef SKYPARKLOG_HPP_
#define SKYPARKLOG_HPP_

#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <sys/file.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include "SDL_config.h"
namespace skypark {

class SkyparkLog {
public:
	void log(const char * csformat, ...) {
		va_list ap;
		va_start(ap, csformat);
		log(csformat, ap);
		va_end(ap);
	}
private:
	void log(const char * csformat, va_list &ap) {
		char logBuf[1024 * 4];
		int iTimeLen = 0;
		{
			time_t timep;
			struct tm *p;
			time(&timep);
			p = localtime(&timep);
			iTimeLen = snprintf(logBuf, sizeof(logBuf) - 1,
					"[%02d-%02d %02d:%02d:%02d]", (1 + p->tm_mon), p->tm_mday,
					p->tm_hour, p->tm_min, p->tm_sec);
		}
		int len = vsnprintf(logBuf + iTimeLen, sizeof(logBuf) - 2 - iTimeLen,
				csformat, ap);
		if (len >= 0 && len < (int) (sizeof(logBuf) - 1 - iTimeLen)) {
			logBuf[len + iTimeLen] = '\0';
			SDL_Log("%s\n", logBuf);
		}
	}
};

}

#endif


C:\data\www\SanguoSDL\jni\src\Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := main

SDL_PATH := ../SDL

LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include

# Add your application source files here...
LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \
	SanguoMain.cpp

LOCAL_SHARED_LIBRARIES := SDL2 SDL2_image

LOCAL_LDLIBS := -lGLESv1_CM -llog -landroid

include $(BUILD_SHARED_LIBRARY)


C:\data\www\SanguoSDL\jni\src\SanguoMain.cpp

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <dirent.h>

#include <jni.h>
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>

#include "SDL_config.h"
#include "SDL_test.h"
#include "../skypark_game/SkyparkLog.hpp"

using namespace skypark;

SkyparkLog g_SkyparkLog;

int main(int argc, char *argv[]) {
	g_SkyparkLog.log("[%s][%d]begin", __FILE__, __LINE__);

	g_SkyparkLog.log("[%s][%d]end", __FILE__, __LINE__);

	while (true) {
		sleep(1);
		g_SkyparkLog.log("[%s][%d]run...", __FILE__, __LINE__);
	}
	return 0;
}


C:\data\www\SanguoSDL\AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- Replace org.libsdl.app with the identifier of your game below, e.g.
     com.gamemaker.game
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="cn.skypark"
      android:versionCode="1"
      android:versionName="1.0"
      android:installLocation="auto">

    <!-- Create a Java class extending SDLActivity and place it in a
         directory under src matching the package, e.g.
         	src/com/gamemaker/game/MyGame.java

         then replace "SDLActivity" with the name of your class (e.g. "MyGame")
         in the XML below.

         An example Java class can be found in README-android.txt
    -->
    <application android:label="@string/app_name"
                 android:icon="@drawable/ic_launcher"
                 android:allowBackup="true"
                 android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
        <activity android:name="SanguoSDL"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <!-- Android 2.3.3 -->
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10" />

    <!-- OpenGL ES 2.0 -->
    <uses-feature android:glEsVersion="0x00020000" /> 

    <!-- Allow writing to external storage -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
</manifest> 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章