0

我需要为 android 和 ios 创建一个应用程序,它可以识别我国特定山脉的山峰(意大利。和.. 对不起,我的英语不好,希望你能理解)。
我将使用phonegap 和wikiitude。
我将具体介绍我所做的事情(基于他们的设置指南 phonegap plugin ios)以更好地解释我自己。

该指南说:
1-创建一个PhoneGap项目。现在,该文件夹已在正确的位置创建并且没有任何错误。
2a- 创建通用 www 的 World 文件夹。我已经手动创建了它。
2b-“示例部分包括几个如何创建建筑师世界的示例。” 在这里,我假设我需要手动创建我的项目 World 文件夹内容,所以我做到了。我按照示例(index.html、js/ 、css/)创建了一个空文件和文件夹的结构, assets/* 和以项目命名的 .js 文件)。我继续阅读指南的示例部分。我特别关注 POI 示例,因为它们是我的应用程序的目的。我已经将那里提到的代码部分与我在 github 上找到的文件进行了交叉检查。最后,我将相关文件从它们的示例复制到我的应用程序 World 文件夹中。
3-为ios构建项目。成功完成。
4-使用特定命令添加插件。这已完成,没有任何错误。我的 World 文件夹中的文件已复制到我的 ios 中。
5- 使用 Xcode 启动应用程序。我已经截取了生成的文件夹的屏幕截图(您可以在下面的评论中找到链接,我不能发布图片 XD)。

老实说,我什至不确定这是正确的过程,因为指南对此并不十分清楚。我假设我从上面的步骤 2b 获得的 .js 文件是我需要的 AR 代码所在的位置,但索引是空的,所以这些文件没有链接,我不知道什么 javascript 会让它们如此. 我什至不确定 .js 文件中的代码是否有效,因为我已经从每个示例文件夹中获取了文件并将它们合并到我的项目文件夹中。

现在,如果我尝试按原样启动模拟,我会从 www 文件夹中的 index.html 文件中获得标准的 phonegap“设备就绪”屏幕。
据我了解,目标上的功能 1.1 Image 应该将我的 www 索引与 World 索引连接起来,但如果我按原样添加它,它会给出一个无响应的链接(我期待一个空白页面,因为我的 World 索引是空的)。我在Wikitude ARchitect v3.0 API 文档中搜索了这个功能但没有成功,我不知道如何自己设置它。

在这一点上,我真的需要一些指导:我已经形象地阅读了他们所有的论坛(我几乎可以说是字面意思),我已经多次阅读指南并且我已经在他们的参考中搜索了示例中解释的功能但没有成功(在该指南的“javascript 界面”部分有 AR 功能的描述,但没有关于如何构建和调用它们以及放置它们的位置的实际信息)。

对不起,文字墙,我真的希望你能就如何继续向我提供一些帮助。

非常感谢你。

PS 我正在使用 phonegap 3.3、Xcode 5.0.2、android 开发人员工具 v 22.3.0 和 Eclipse 4.2.1。在装有 OS 10.8.5 的 Mac Book pro 上工作

4

2 回答 2

2

这是一个简单的 index.js(与PhoneGap 应用程序相关),它加载了一个与应用程序捆绑在一起的 Architect World:

var app = {
// Application Constructor
initialize: function() {
    this.bindEvents();
},
// Bind Event Listeners
//
// Bind any events that are required on startup. Common events are:
// 'load', 'deviceready', 'offline', and 'online'.
bindEvents: function() {
    document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicity call 'app.receivedEvent(...);'
onDeviceReady: function() {
    app.receivedEvent('deviceready');

    app.wikitudePlugin = cordova.require("com.wikitude.phonegap.WikitudePlugin.WikitudePlugin");
    app.wikitudePlugin.isDeviceSupported(app.onDeviceSupportedCallback, app.onDeviceNotSupportedCallback);
},

onDeviceSupportedCallback: function() {

    app.wikitudePlugin._onARchitectWorldLaunchedCallback = app.onArchitectWorldLaunched;
    app.wikitudePlugin._onARchitectWorldFailedLaunchingCallback = app.onArchitectWorldFailedLaunching;


    app.wikitudePlugin.loadARchitectWorld('www/res/ARchitectWorld/SimpleCircle.html');

    app.wikitudePlugin.setOnUrlInvokeCallback(app.onURLInvoked);
},
onDeviceNotSupportedCallback: function() {
    alert('device not supported');
},
onArchitectWorldLaunched: function(url) {
    alert('launched ' + url);
},
onArchitectWorldFailedLaunching: function(error) {
    alert('error ' + error);
},
onURLInvoked: function(url) {

    // TODO: impl. url parsing to know what to do with the given url.

    app.wikitudePlugin.close();
},


// Update DOM on a Received Event
receivedEvent: function(id) {
    var parentElement = document.getElementById(id);
    var listeningElement = parentElement.querySelector('.listening');
    var receivedElement = parentElement.querySelector('.received');

    listeningElement.setAttribute('style', 'display:none;');
    receivedElement.setAttribute('style', 'display:block;');

    console.log('Received Event: ' + id);
}

};

此代码主要检查当前设备是否能够运行 AR World,如果是,则启动一个 Architect World,它是您的应用程序包的一部分。这是一个简单的建筑师世界,它在特定位置显示一个圆圈。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="viewport" content="target-densitydpi=device-dpi, width = 540, user-scalable = 0" />
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Simple Circle</title>

<!-- Include the ARchitect library -->
<script src="architect://architect.js"></script>


<script>

function createCircle()
{
    AR.logger.activateDebugMode();


    var circle = new AR.Circle(2, {style: {fillColor: '#8F45FF'}});

    var drawableLocation = new AR.RelativeLocation(null, 10, 0);
    var geoObject = new AR.GeoObject(myGeoLocation, {drawables: {cam: circle}});

    AR.logger.info("circle created");
}

function sendCloseARViewRequest()
{
    // hideButton?status=hide could be anything, you just have to know what to do with the url in the PhoneGap world.
    document.location = 'architectsdk://hideButton?status=hide';
}

</script>
</head>

<body>

<button value="Create ARchitectObj" type="button" onclick="createCircle()">Create Circle</button>

<button value="Close" type="button" onclick="sendCloseARViewRequest()">Close</button>


</body>
</html> 

Wikitude SDK 包含 SDK 各个部分的大量文档(ObjC/Java 参考、JS 参考和描述 SDK 使用的一般文档。请参阅 Documentation.html 和 Reference/JavaScript Reference/index.html)。

当您创建一个新的 PhoneGap 项目时,添加 Wikiitude 插件和您的自定义 Architect World,然后将代码添加到您的 index.js 中,您应该有一个具有 AR 功能的正在运行的应用程序。

于 2014-03-25T14:37:13.113 回答
0

随着上次更新,wikitude 团队改进了基本指南http://www.wikitude.com/developer/documentation/phonegap
这个提供了额外的帮助:D 我已经根据示例构建了自己的 ar 应用程序,它似乎工作:D

于 2014-04-04T08:30:46.020 回答