2016-11-17 1 views
1

Dans mon application PhoneGap, j'utilisais le Wikitude Cordova Plugin (5.1.1) et toutes les fonctionnalités de Wikitude fonctionnaient correctement. Maintenant, je suis en train de mettre à jour mon plugin vers la dernière version de la version 5.3.0, mais nous sommes confrontés à un problème avec la fonctionnalité du plugin Wikitude dans les périphériques IOS. Le problème est:Les marqueurs et le radar ne sont pas visibles dans ARView En raison de AR.ImageResource ne charge pas les images locales

Lorsque je charge le Wikitude ARView dans l'application, tous les marqueurs et le radar sont affichés correctement, mais quand je détruis tous les objets de l'ARView en utilisant AR.context.destroyAll(); et après cela quand j'essaie à nouveau d'attirer les radars et les créateurs sur ARView, ces objets ne sont pas visibles sur ARView. Mon application a la fonction dans laquelle je dois effacer tout le marqueur de l'ARView et redessiner les marqueurs avec quelques filtres. Maintenant, je trouve la raison pour laquelle le marqueur et le radar ne sont pas visibles après avoir détruit. La raison est "AR.ImageResource" n'est pas chargé correctement pour le marqueur et le radar après la destruction. En ajoutant le rappel onLoaded et onError pour AR.ImageResource. La première fois que nous chargeons le monde AR, je reçois l'appel sur le rappel "onLoadded". Mais quand je charge le ImageResouce après avoir détruit, je reçois l'appel sur le rappel "onError" et l'erreur montre qu'il trouve l'image sur le mauvais chemin.

J'utilise l'URL d'expérience AR pour loadARchitectWorld comme: var arExperienceUrl = "www/main_home_ar_view_screen.html";

Chemin d'image pour la ressource d'image radar: www> img> wikitude_img> radar_bg.png

Code pour charger le AR.ImageResource:

AR.radar.background = new AR.ImageResource("img/wikitude_img/radar_bg.png", { 
onLoaded : function successFn(loadedURL) { 
      /* Respond to successful world loading if you need to */ 
      alert("onLoaded");     
    }, 
onError : function errorFn(error) 
{ 
      alert("onError " + error + " & " + error.message); 
    }}); 

Le code ci-dessus fonctionne bien pour la première moment où je charge le monde AR. Mais après avoir détruit l'objet de ARView, AR.ImageResource trouve l'image à ce chemin "/www/main_home_ar_view_screen.html/img/wikitude_img/radar_bg.png", en raison de trouver l'image sur le mauvais chemin, l'image n'est pas chargée (Voir le Image jointe).

enter image description here

Je trouve aussi ces choses:

  • Le même code fonctionne très bien sur la plate-forme Android.
  • Si j'utilise Image URL (Image distante) avec AR.ImageResource, alors tout va bien sur iOS. Cela signifie que tous les marqueurs et radars s'affichent correctement après la destruction sur ARView mais lorsque j'utilise le chemin d'image local avec AR. ImageResource puis les marqueurs et le radar ne sont pas affichés après la destruction (les marqueurs et le radar sont affichés correctement lorsque je charge le monde AR avec le chemin de l'image locale).

S'il vous plaît me suggérer comment résoudre le problème AR.ImageResouce avec chemin de l'image locale.

Répondre

0

Pour résoudre ce problème, il suffit de coller l'extrait suivant en haut de votre fichier principal .js Architecte

AR.__resourceUrl = function(url) 
{ 
  if (/^([a-z\d.-]+:)?\/\//i.test(url)) 
    { 
   // URL contains protocol and can be considered absolute 
   return url; 
  } 
  // get protocol 
  var protocol = document.baseURI.substring(0, 
     document.baseURI.indexOf('/') + 2); 
  var uri = document.baseURI.substring(document.baseURI.indexOf('/') + 2); 
    // remove fragment identifier 
    if (uri.indexOf('#') > 0 && uri.length > uri.indexOf('#') +1) { 
        uri = uri.substring(0, uri.lastIndexOf('#')); 
        // in case there was a '/' after the fragment identifier, we need to add it back again 
        if (uri[uri.length - 1] !== '/') { 
            uri += '/'; 
        } 
    } 
  // remove trailing file (edge case, this is just a domain e.g. 
  // www.google.com) 
  uri = uri.substring(0, uri.lastIndexOf('/') + 1); 
  var baseUrl = protocol + uri; 
  if (baseUrl[baseUrl.length - 1] !== '/') 
  baseUrl += '/'; 
  if (url[0] === '/') { 
  // url references root 
  baseUrl = baseUrl.substring(0, baseUrl.indexOf('/', baseUrl 
 .indexOf('//') + 2)); 
  } 
    var resourceURL = baseUrl + url; 
    return resourceURL; 
}; 

Comme je l'ai cette solution du Forum des développeurs Wikitude