2016-09-04 11 views
0

アンドロイドアプリケーション内でProcessingスケッチを実行しようとしています。 このスケッチでは、rawディレクトリにあるSVGファイルにアクセスする必要があります。 そのファイルにアクセスする方法がわかりません。たとえファイルがディレクトリ "data"にあっても、処理の仕組みと全く同じですが、全く機能しません。このサンプルコードを確認してください:Android Studioを使用して処理中のファイルにアクセスする方法

import processing.core.PApplet; 
import processing.core.PShape; 
import processing.core.PVector; 

public class Menu extends PApplet { 
    /**************************************************/ 
    //icon: 
    PShape icon; 

    /**************************************************/ 
    public void settings() 
    { 
     size(displayHeight, displayHeight); 
    } 
    /**************************************************/ 
    public void setup() 
    { 
     icon = loadShape("menu.svg"); //here is where an error occurs; 
    } 
    /**************************************************/ 
    public void draw() 
    { 
     background(0); 
    } 
    /**************************************************/ 

UPDATE

エラーメッセージを:あなたはSDカード、SQLiteのデータベースまたはsharedpreferences内の画像(またはその他のデータ)を記憶することができる

               --------- 

beginning of crash 
09-07 07:36:07.503 2939-2986/letalis.safr.com.letalis E/AndroidRuntime: FATAL EXCEPTION: Animation Thread 
                     Process: letalis.safr.com.letalis, PID: 2939 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String processing.data.XML.getString(java.lang.String)' on a null object reference 
                      at processing.core.PShapeSVG.<init>(Unknown Source) 
                      at processing.core.PShapeSVG.<init>(Unknown Source) 
                      at processing.core.PGraphicsAndroid2D.loadShape(Unknown Source) 
                      at processing.core.PApplet.loadShape(Unknown Source) 
                      at letalis.safr.com.letalis.Esquech_Menu.setup(Esquech_Menu.java:111) 
                      at processing.core.PApplet.handleDraw(Unknown Source) 
                      at processing.core.PSurfaceNone.callDraw(Unknown Source) 
                      at processing.core.PSurfaceNone$AnimationThread.run(Unknown Source) 
09-07 07:36:07.578 2939-2952/letalis.safr.com.letalis W/EGL_emulation: eglSurfaceAttrib not implemented 
09-07 07:36:07.578 2939-2952/letalis.safr.com.letalis W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xacb7f860, error=EGL_SUCCESS 
09-07 07:36:07.592 2939-2952/letalis.safr.com.letalis E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaebf1150 
09-07 07:36:07.734 2939-2952/letalis.safr.com.letalis W/EGL_emulation: eglSurfaceAttrib not implemented 
09-07 07:36:07.735 2939-2952/letalis.safr.com.letalis W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xab2c9da0, error=EGL_SUCCESS 
09-07 07:36:07.942 2939-2952/letalis.safr.com.letalis V/RenderScript: 0xa21fe000 Launching thread(s), CPUs 2 
09-07 07:36:08.053 2939-2952/letalis.safr.com.letalis E/Surface: getSlotFromBufferLocked: unknown buffer: 0xaebf1230 
+0

私はまた、コードの区切りとして星を置きます。乾杯:) – user6657161

+0

おかげで、知って良いです:) – Zardoz

+0

@Zardozエラーメッセージ –

答えて

0

形状をロードすると、問題ではないかもしれません。あなたはSVGシェイプをスクリーンに描画していません。 menu.svgは、Menu.pdeがあるプロジェクトのルートにある必要があります。下のスクリーンショットを参照してください。私はsvgファイルがどこにあるのかを示します。

import processing.core.PApplet; 
import processing.core.PShape; 
import processing.core.PVector; 

public class Menu extends PApplet { 
    /**************************************************/ 
    //icon: 
    PShape icon; 

    /**************************************************/ 
    public void settings() 
    { 
     size(400, 400); 
    } 
    /**************************************************/ 
    public void setup() 
    { 
     icon = loadShape("Ghostscript_Tiger.svg"); 
    } 
    /**************************************************/ 
    public void draw() 
    { 
     shape(icon, 50, 50, 300, 300); // need to draw the shape you loaded 
    } 
    /**************************************************/ 
} 

+0

まだ動作していません...ありがとうございます。 – Zardoz

+0

@zardozあなたのmenu.svgが壊れている可能性があります。別のファイルをダウンロードしてみてください。私はWikipediaのGhostscript Tigerを入手しました。ブラウザがsvgファイルをpngに変換しようとしている可能性があることに注意してください。私は生のファイルをダウンロードするwgetコマンドを使用しなければならなかった –

+0

決してそれを考えた。 J.P. ファイルが本当に破損しています。 user6657161とYigit Birerogluに感謝します。 – Zardoz

0

。アプリには、背景画像のように必要なファイルのみがパックされています。

+0

私はこの種の操作ではあまり良くありません。しかし、今私は何をする必要があるかの手がかりを持っているかもしれません。ありがとう。 – Zardoz

0

あなたが開いているディレクトリを使用せずにファイルをインポートしようとすると、処理スケッチはすぐにプロジェクトフォルダ内の「データ」という名前のフォルダを探します。たとえば、あなたのプロジェクトが

Cで保存されている場合:// processingSketch/

次に、あなたがそのような
アイコン= loadShape(「menu.svg」)などの線でコードをインポートするすべてのファイル。

又は

アイコン= loadShape(データ経路( "menu.svg")); // processingSketch /データおよびそのようなDataフォルダが存在しない場合、それは動作しません。

はCで検索されます。

したがって、プロジェクトフォルダにDataフォルダを作成し、そこに「menu.svg」を置くか、またはあなたのAndroidシステム内のファイルのオープンディレクトリを見つけて、コードに含めるのいずれか。

+0

"データ"フォルダを作成してファイルを配置し、コードから呼び出して、肯定的な結果は得られませんでした。私は本当にあなたが私に与えているこの2番目のオプションを理解していない、オープンディレクトリを見つけることについて、私は立ち往生している。ありがとう – Zardoz

+0

@Zardoz申し訳ありませんが、私は "データ"について誤解されている可能性があります。私はその "データ"と思う。しかし、確かに、 "スケッチ"をクリックし、 "ファイルを追加..."を選択することができます。それは自動的に正しいフォルダに配置されます。これがうまくいかない場合は、 "icon = loadShape(dataPath(" menu.svg ")); –

+0

を使ってみてください。エラーが発生します。 (私もそれを行う方法を知りません)。おかげで再び。 – Zardoz

関連する問題