从零开始-边学边做-塔防游戏-七彩三国(五)--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> 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值