65.9K
CodeProject 正在变化。 阅读更多。
Home

对 Project Anarchy 的 Android 构建的探索

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (6投票s)

2014 年 10 月 6 日

CPOL

12分钟阅读

viewsIcon

25400

对 project anarchy Wild Card 的简单演练。

引言

这是一个对 Project Anarchy 设置中包含的演示项目进行的简单 walkthrough,我们可以对其进行修改和定制。Project Anarchy 是一个免费的 Android 游戏开发引擎(也支持 Tizen)。利用 Havok Physics 引擎修改、实现您自己的游戏逻辑。

背景

Project Anarchy 是一款专为移动开发设计的游戏引擎,其核心集成了 Havok(主要工具),非常容易创建 AAA 级动画游戏,该引擎由 Intel 提供。

 

修改游戏演示

Project Anarchy 包括

i) Havok Vision Engine

ii) Havok Physics

iii) Havok Animation Studio

使用 Project Anarchy 开发游戏所需的编程技能集

i) LUA:- 最重要的是你需要了解 LUA 脚本,因为角色逻辑、动作等一切都通过 LUA 脚本完成。

ii) C++:- 编译成最终 APK 以及一些调试工作是通过 C++ 完成的,因此需要 C++ 知识。

下载后可执行文件的概览

 

 

安装 Project Anarchy 的先决条件

需要安装 Android ADT bundle(32位),需要安装的软件包是 2.3.3,这是 Project Anarchy 的要求。

需要在您的计算机上安装 Android NDK r9(32位)。

下载 VC++ 2010 express 版本

 

 

 

 

 

 

下载 DirectX 2010 SDK

安装时可能会遇到一些问题,例如 s1023 错误,您需要在命令提示符(以管理员身份运行)中输入此命令:

MsiExec.exe /passive /X{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}

MsiExec.exe /passive /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7}

 

 

 

 

 

 

 

之后就可以正常使用了。

下载并安装 JDK 7(x86)。

可在此处找到分步说明:

https://www.projectanarchy.com/setting-your-computer-android-development

让我们开始识别您的 Android 手机。

我的手机:Lenovo K900

我进入命令提示符模式,进入 Android ADT 安装链接,输入此命令以检查设备是否可用。

 

 

 

 

 

 

当时没有显示任何内容,然后我安装了 Lenovo K900 驱动程序,再次检查时就显示了。

开始安装手机驱动程序(很重要,否则设备将无法识别)。

 

 

 

 

 

 

 

另一张显示驱动程序安装的截图。

 

 

 

 

 

 

 

当时没有显示任何内容,然后我安装了 Lenovo K900 驱动程序,再次检查时就显示了。

 

 

 

 

 

 

 

 

是时候进行实验了。

我将以 RPG Demo 为目标,它是免费版本,该演示具有一些很棒的 GUI 和出色的 3D 图形。

VForge:-

VForge 是 Project Anarchy 中用于设置开发的地方。它是您从头开始或修改项目的界面。提供了许多用于开发游戏的工具集。

我首先进入 RPG 项目并开始对其进行修改。

场景位于此处:

C:\Havok\AnarchySDK\Data\Vision\Samples\Engine\RPG

在 VForge 中打开项目,在此之前,让我们修改主玩家的 LUA 文件,增加玩家的生命值。

-- 玩家角色的脚本

function GetEntityClassType(self)
  return "RPG_PlayerCharacter";
end

function OnInitProperties(self)  
  -- 实体属性
  self:SetProperty("m_collisionRadius", 40);
  self:SetProperty("m_collisionHeight", 160);
  self:SetProperty("m_sensorSize", 256);
  self:SetProperty("m_desiredSpeed", 350);

  self:SetProperty("m_equipmentAttachmentBoneNames[ES_Weapon]", "right_attachment_jnt");
  self:SetProperty("m_equipmentAttachmentBoneNames[ES_Shoulder]", "left_shouderPad_jnt");
  
  self:SetProperty("m_defaultEquipmentScripts[ES_Weapon]", "Scripts/Pickups/RPG_Barbarian_Axe.lua");
  --self:SetProperty("m_defaultEquipmentScripts[ES_Shoulder]", "Scripts/Pickups/RPG_Barbarian_Shoulder.lua");

  self:SetProperty("m_actionData.m_spawnAnimationDelay", 1.4);

  -- 基础角色属性
  self:SetProperty("m_stats.m_strength", 16);
  self:SetProperty("m_stats.m_dexterity", 12);
  self:SetProperty("m_stats.m_spirit", 10);
  self:SetProperty("m_stats.m_vitality", 12);

  -- 生命值
  self:SetProperty("m_stats.m_baseHealth", 200);
  self:SetProperty("m_stats.m_healthRegenerationEnabled", true);
  self:SetProperty("m_stats.m_healthRegenerationRate", 0.8);
  self:SetProperty("m_stats.m_unlimitedHealth", false);
  self:SetProperty("m_displayHealth", true);

  -- 法力值
  self:SetProperty("m_stats.m_baseMana", 30);
  self:SetProperty("m_stats.m_manaRegenerationEnabled", true);
  self:SetProperty("m_stats.m_manaRegenerationRate", 0.8);

  -- 攻击
  self:SetProperty("m_stats.m_baseDamage", 60);

  self:SetProperty("m_actionData.m_aoeAttackDamageMultiplier", 3);
  self:SetProperty("m_actionData.m_aoeAttackRange", 250);
  self:SetProperty("m_actionData.m_aoeAttackManaCost", 14);
  
  self:SetProperty("m_actionData.m_powerAttackDamageMultiplier", 2);
  self:SetProperty("m_actionData.m_powerAttackRange", 750);
  self:SetProperty("m_actionData.m_powerAttackAngle", 10);
  self:SetProperty("m_actionData.m_powerAttackManaCost", 8);
  
  self:SetProperty("m_actionData.m_rangedAttackImpactSpeedMultiplier", 1);
  self:SetProperty("m_actionData.m_aoeAttackImpactSpeedMultiplier", 1.5);
  self:SetProperty("m_actionData.m_powerAttackImpactSpeedMultiplier", 2);
  self:SetProperty("m_actionData.m_meleeAttackImpactSpeedMultiplier", 1);

  -- 调试
  self:SetProperty("m_debugDisplayStats", false);
  self:SetProperty("m_debugDisplayMovementInfo", false);
  self:SetProperty("m_debugDisplayInventory", false);
  self:SetProperty("m_debugDisplayBehaviorEvents", false);
  self:SetProperty("m_debugDisplayNavmeshStatus", false);
  self:SetProperty("m_debugDisplayEffectInformation", false);

end

它的基础生命值是 200,让我们增加玩家的生命值,这样它就不会那么频繁地死亡。

-- 生命值
  self:SetProperty("m_stats.m_baseHealth", 1200);

 

让我们缩放角色。

VForge 菜单中有许多可用的选项,例如您可以拖放角色进行缩放、旋转等等。

等等。

首先,让我们将 RPG_Garden_Caster 拖到场景中并进行缩放。

 

 

 

 

 

 

 

 

 

我们拖动和缩放其他敌人。

 

 

 

 

 

 

再次旋转和缩放。

 

 

 

 

 

 

 

修改并运行场景后进行检查。

 

 

 

 

 

 

 

保存场景,以便我们可以编译它以供最终发布。

 

 

 

 

 

 

 

在 VForge 中编译时,它将导出场景。

 

 

 

 

 

 

 

在 VC++ 中打开项目的 Android 版本。

它所在的位置:

C:\Havok\AnarchySDK\Workspace\Android_x86_VS2010_anarchy__C++

 

 

 

 

 

 

添加或修改场景的位置:

#define LOGOHAVOK_FILENAME "GUI/Textures/Logo_Havok_128x64.tga"
#define LOGOWMD_FILENAME "GUI/Textures/Logo_WMD_128x256.tga"
#define INTROSCREEN_FILENAME "GUI/Textures/Anarchy_Intro_512x512.tga"
#define GAMEOVERSCREEN_FILENAME "GUI/Textures/Anarchy_GameOver_512x512.tga"
#define LOADINGSCREEN_FILENAME "GUI/Textures/Anarchy_Splash_512x512.tga"
#define SCENE_FILENAME "Scenes/Arena/Arena1.vscene"

 

您需要修改 SCENE_FILENAME 选项以指向您创建的场景,然后将 RPG 设置为启动项目。

 

 

 

 

 

 

让我们开始编译项目,我选择了 Release 版本。

编译过程中重要的文件。

1>------ Build started: Project: VisionEnginePlugin, Configuration: Release hkAndroid ------
2>------ Build started: Project: HavokPhysicsEnginePlugin, Configuration: Release hkAndroid ------
3>------ Build started: Project: HavokBehaviorEnginePlugin, Configuration: Release hkAndroid ------
4>------ Build started: Project: FmodEnginePlugin, Configuration: Release hkAndroid ------
1>C:\Havok\AnarchySDK\Build\MSBuild\Platforms\hkAndroid\Microsoft.Cpp.hkAndroid.Targets(328,5): warning : The x86 toolchain doesn't seem to play nice with the STL, or C++ features. Use at your own risk.
2>C:\Havok\AnarchySDK\Build\MSBuild\Platforms\hkAndroid\Microsoft.Cpp.hkAndroid.Targets(328,5): warning : The x86 toolchain doesn't seem to play nice with the STL, or C++ features. Use at your own risk.
4>C:\Havok\AnarchySDK\Build\MSBuild\Platforms\hkAndroid\Microsoft.Cpp.hkAndroid.Targets(328,5): warning : The x86 toolchain doesn't seem to play nice with the STL, or C++ features. Use at your own risk.
3>C:\Havok\AnarchySDK\Build\MSBuild\Platforms\hkAndroid\Microsoft.Cpp.hkAndroid.Targets(328,5): warning : The x86 toolchain doesn't seem to play nice with the STL, or C++ features. Use at your own risk.
4>  Performing Custom Build Tools
1>  Performing Custom Build Tools
2>  Performing Custom Build Tools
3>  Performing Custom Build Tools
3>  Language subdirectory: lua
3>  Search paths
3>     .\
3>     ..\..\..\..\..\
4>  Language subdirectory: lua
4>  Search paths
4>     .\
4>     ..\..\..\..\..\
4>     .\swig_lib\lua\
4>     C:\Havok\AnarchySDK\ThirdParty\redistsdks\swig\2.0.3\Lib\lua\
4>     \lua\
4>     .\swig_lib\
4>     C:\Havok\AnarchySDK\ThirdParty\redistsdks\swig\2.0.3\Lib\
4>     \
4>  Preprocessing...
4>  Starting language-specific parse...
3>     .\swig_lib\lua\
3>     C:\Havok\AnarchySDK\ThirdParty\redistsdks\swig\2.0.3\Lib\lua\
3>     \lua\
3>     .\swig_lib\
3>     C:\Havok\AnarchySDK\ThirdParty\redistsdks\swig\2.0.3\Lib\
3>     \
3>  Preprocessing...
3>  Starting language-specific parse...
2>  Language subdirectory: lua
2>  Search paths
2>     .\
2>     ..\..\..\..\..\
2>     .\swig_lib\lua\
2>     C:\Havok\AnarchySDK\ThirdParty\redistsdks\swig\2.0.3\Lib\lua\
2>     \lua\
2>     .\swig_lib\
2>     C:\Havok\AnarchySDK\ThirdParty\redistsdks\swig\2.0.3\Lib\
2>     \
2>  Preprocessing...
2>  Starting language-specific parse...
4>  Processing types...
4>  C++ analysis...
4>  Generating wrappers...
2>  Processing types...
2>  C++ analysis...
2>  Generating wrappers...
3>  Processing types...
3>  C++ analysis...
3>  Generating wrappers...
1>  Language subdirectory: lua
1>  Search paths
1>     .\
1>     ..\..\..\..\
1>     .\swig_lib\lua\
1>     C:\Havok\AnarchySDK\ThirdParty\redistsdks\swig\2.0.3\Lib\lua\
1>     \lua\
1>     .\swig_lib\
1>     C:\Havok\AnarchySDK\ThirdParty\redistsdks\swig\2.0.3\Lib\
1>     \
1>  Preprocessing...
1>  Starting language-specific parse...
1>  Processing types...
1>  C++ analysis...
1>  Generating wrappers...
4>  Section 1: OK
4>  Parsing finished.
4>  Rewriting cpp...
4>  Writing Lua/FmodLuaModule_wrapper.cpp
2>  Section 1: OK
4>  Success
2>  Parsing finished.
2>  Rewriting cpp...
2>  Writing Lua/PhysicsLuaModule_wrapper.cpp
2>  Success
3>  Section 1: OK
3>  Parsing finished.
3>  Rewriting cpp...
3>  Writing Lua/BehaviorLuaModule_wrapper.cpp
3>  Success
4>  VFmodEvent.cpp
2>  vHavokBallAndSocketConstraintChain.cpp
3>  vHavokBehaviorResource.cpp
1>  Section 1: OK
1>  Section 2: OK
1>  Section 6: OK
1>  Section 8: OK
1>  Section 9: OK
1>  Parsing finished.
1>  Input file is valid, rewriting cpp and generating hpp...
1>  No need to update Scripting/Lua\VisionLuaModule_wrapper.hpp
1>  Writing Scripting/Lua/VisionLuaModule_wrapper.cpp
1>  Success
1>  VisionEnginePluginPCH.h
1>  SkyLayer.cpp
1>  DecorationDensityChannel.cpp
4>  VFmodReverb.cpp
1>  Projector.cpp
4>  FmodLuaModule_wrapper.cpp
1>  VTransitionStateMachine.cpp
1>  VFollowPathComponent.cpp
1>  IVMenuSystemResource.cpp
1>  VisionEnginePlugin.cpp
1>  SimpleCopyPostprocess.cpp
4>  VFmodEventGroup.cpp
1>  VLensFlareManager.cpp
1>  PathCameraEntity.cpp
1>  VisionEnginePluginPCH.cpp
1>  VCoronaManager.cpp
1>  ParticleGroupBase.cpp
3>  vHavokBehaviorModule.cpp
2>  vHavokConstraintChain.cpp
4>  VFmodAnimationEventSoundTrigger.cpp
1>  VMapLookupControl.cpp
4>  VFmodCollisionMeshInstance.cpp
1>  VisionLuaModule_wrapper.cpp
4>  FmodEnginePlugin.cpp
4>  VFmodSoundObject.cpp
2>  vHavokConversionUtils.cpp
4>  VFmodSoundResource.cpp
3>  HavokBehaviorEnginePlugin.cpp
4>  VFmodManager.cpp
2>  vHavokRagdollConstraint.cpp
3>  vHavokBehaviorComponent.cpp
4>  FmodEnginePlugin_android_x86_vs2010_anarchy.vcxproj -> C:\Havok\AnarchySDK\Source\Vision\Runtime\EnginePlugins\ThirdParty\FmodEnginePlugin\..\..\..\..\..\..\Lib\android_x86_vs2010_anarchy\release\libvFmodEnginePlugin.a
2>  vHavokConstraintChainRenderingData.cpp
5>------ Build started: Project: VisionApp, Configuration: Release hkAndroid ------
5>C:\Havok\AnarchySDK\Build\MSBuild\Platforms\hkAndroid\Microsoft.Cpp.hkAndroid.Targets(328,5): warning : The x86 toolchain doesn't seem to play nice with the STL, or C++ features. Use at your own risk.
5>  VAppBase.cpp
3>  HavokBehaviorPlugin.cpp
2>  vHavokShapeFactory.cpp
5>  VAppImpl.cpp
5>  VCameraHandling.cpp
3>  vHavokBehaviorResourceManager.cpp
2>  vHavokStaticMesh.cpp
5>  VAppAndroid.cpp
5>  VHelp.cpp
3>  BehaviorLuaModule_wrapper.cpp
5>  VAppHelper.cpp
2>  vHavokCableConstraintChainRenderer.cpp
5>  VDefaultMenu.cpp
2>  vHavokRagdoll.cpp
5>  VLogoOverlay.cpp
5>  VDebugProfiling.cpp
5>  VScreenShotHelper.cpp
2>  vCharacterStateClimbing.cpp
5>  VRestoreScreen.cpp
3>  HavokBehaviorEnginePlugin_android_x86_vs2010_anarchy.vcxproj -> C:\Havok\AnarchySDK\Source\Vision\Runtime\EnginePlugins\Havok\HavokBehaviorEnginePlugin\..\..\..\..\..\..\Lib\android_x86_vs2010_anarchy\release\libvHavokBehavior.a
5>  VAppModule.cpp
2>  vHavokVisionShapes.cpp
5>  VCheckOutputFolder.cpp
5>  VDebugOptions.cpp
2>  vHavokPhysicsModule.cpp
5>  VLoadingScreen.cpp
5>  VExitHandler.cpp
5>  VAppMobile.cpp
5>  VDebugShadingModes.cpp
2>  vHavokPrismaticConstraint.cpp
5>  VDataDirectoryHelper.cpp
5>  VisionApp_android_x86_vs2010_anarchy.vcxproj -> C:\Havok\AnarchySDK\Source\Vision\Runtime\Framework\VisionApp\..\..\..\..\..\Lib\android_x86_vs2010_anarchy\release\libVisionApp.a
2>  vHavokVisualDebugger.cpp
2>  vHavokGenericConstraint.cpp
1>  VCoronaComponent.cpp
1>  VCablePathRenderer.cpp
1>  VFreeCamera.cpp
2>  vHavokPointToPlaneConstraint.cpp
1>  VCursor.cpp
1>  _AnimEntity.cpp
1>  VLuaHelpers.cpp
2>  vHavokDebugConstraintChainRenderer.cpp
1>  CommonTerrainFilters.cpp
1>  IVShadowMapComponent.cpp
1>  VPostProcessScreenMasks.cpp
1>  VPathRendererBase.cpp
2>  vHavokStiffSpringConstraint.cpp
1>  VGraphObject.cpp
1>  CameraPositionEntity.cpp
1>  VDebugPathRenderer.cpp
1>  VMobileForwardRenderLoop.cpp
1>  VSimpleShaderProvider.cpp
2>  vHavokConstraintChainRenderer.cpp
1>  StochasticalParam.cpp
1>  TimeOfDay.cpp
1>  VPathRenderingData.cpp
2>  vHavokPointToPathConstraint.cpp
1>  VCustomVolumeManager.cpp
1>  VMobileForwardRenderer.cpp
1>  BillboardGroup.cpp
1>  Sky.cpp
2>  VThrowItemComponent.cpp
1>  ParticleGroupManager.cpp
1>  VRendererNodeCommon.cpp
1>  VArchive_wrapper.cpp
2>  vHavokFileStreamAccess.cpp
1>  VDialogFrame.cpp
1>  VTooltip.cpp
1>  IVRenderableItem.cpp
2>  vHavokCharacterController.cpp
1>  VTransitionBase.cpp
1>  VScriptComponent.cpp
1>  VSkeletalBoneProxy.cpp
1>  VItemContainer.cpp
1>  VShadowMapGenSpotDir.cpp
2>  vHavokHingeConstraint.cpp
1>  CubeMapHandle.cpp
1>  VSceneLoader.cpp
1>  VShadowMapGenerator.cpp
2>  vCharacterStateFlying.cpp
1>  Mirror.cpp
2>  vHavokDisplayHandler.cpp
1>  RenderingOptimizationHelpers.cpp
1>  ParticleDescriptor.cpp
1>  VDialog.cpp
2>  vHavokChainConstraintChainRenderer.cpp
1>  SectorVisibilityZone.cpp
1>  VRSDLuaImplementation.cpp
1>  VTextControl.cpp
2>  vHavokSerialize.cpp
1>  VRSDClient.cpp
1>  VWallmarkManager.cpp
2>  vHavokPulleyConstraint.cpp
1>  VModelPreviewControl.cpp
1>  VLensFlareComponent.cpp
1>  VEntityLODComponent.cpp
2>  vCharacterStateInAir.cpp
1>  VTimeOfDayComponent.cpp
1>  VOrbitCamera.cpp
1>  VLightClippingVolumeComponent.cpp
2>  vHavokConstraintListener.cpp
1>  TriggerDoorEntity.cpp
1>  _DanglingEntity.cpp
1>  _ClothEntity.cpp
1>  ClothMesh.cpp
1>  VDialogResource.cpp
2>  vHavokSync.cpp
1>  IVTransitionEventTrigger.cpp
1>  VFakeSpecularGenerator.cpp
1>  VPlayableCharacterComponent.cpp
1>  VPrefab.cpp
1>  VScriptInstance.cpp
2>  vCharacterStateJumping.cpp
1>  VResourcePreview.cpp
2>  vHavokContactListener.cpp
1>  VPostProcessTranslucencies.cpp
1>  ScratchTexturePool.cpp
1>  VZoomDetector.cpp
1>  VGUICommandBuffer.cpp
1>  VListControls.cpp
1>  Glow.cpp
2>  VLineFollowerComponent.cpp
1>  VStringInputMap.cpp
1>  VTimedValueComponent.cpp
1>  VVirtualThumbStick.cpp
2>  vHavokCpuJobThreadPool.cpp
1>  VGUIContext.cpp
1>  BlobShadowManager.cpp
1>  MirrorRenderLoop.cpp
1>  Curve.cpp
2>  vHavokBallAndSocketConstraint.cpp
1>  ToneMapping.cpp
1>  ParticleConstraint.cpp
2>  HavokPhysicsEnginePluginTrackerClasses.cpp
1>  ClothDeformer.cpp
1>  VTransitionManager.cpp
1>  IVPathRenderingData.cpp
1>  VScriptManager.cpp
2>  vHavokBlockerVolumeComponent.cpp

编译项目需要时间,并将显示编译成功。

 

 

让我们将项目部署到 Android 手机。

您需要将 APK 复制到手机。我的版本位于:

C:\Havok\AnarchySDK\Bin\android_x86_vs2010_anarchy\Release

所以,我首先连接了我的 K900 手机到 PC。
 

 

 

 

 

 

 

 

您需要打开 USB 大容量存储。

 

 

 

 

 

 

 

 

将 APK 文件复制到手机,然后从 PC 上断开连接。

在手机上浏览文件。

 

 

 

 

 

 

 

开始安装。

 

 

 

 

 

 

 

 

游戏应用将安装完成。

 

 

 

 

 

 

 

 

 

 

让我们在手机上运行项目。

 

 

 

 

 

 

 

经过所有努力,您已经能够修改游戏演示并进行相应调整。您已经能够创建具有良好图形的 AAA 级游戏。您还能做什么?尝试修改演示,您将学到很多东西。

 

 

资源

https://software.intel.com/en-us/tags/42357

http://www.projectanarchy.com/about

http://forum.projectanarchy.com/forum.php?langid=1

关注点

这是一次很好的学习经历,因为我不得不深入研究 Project Anarchy。Project Anarchy 的一个优点是您可以导入您在 3D MAX、Maya 中的设计和角色,从而为 Android 获得酷炫的 AAA 级动画。该游戏引擎是免费的,由 Intel 提供。

历史

第一次更新

© . All rights reserved.