我试图在我的Android应用程序中运行Processing sketch。
在此草图中,我需要访问位于SVG
目录中的raw
文件。
我不知道如何访问该文件,即使该文件位于目录"数据"就像它在Processing中的工作方式一样,它根本不起作用。请查看以下示例代码:
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);
}
/**************************************************/
更新
错误讯息:
---------
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 :(得分:0)
您可以在sdcard,sqlite数据库或共享首选项中存储图像(或任何其他数据)。只有那些文件打包在应用程序中,这些文件是必需的,如背景图像。
答案 1 :(得分:0)
当您尝试在不使用打开目录的情况下导入文件时,Processing sketch会立即查找名为&#34; Data&#34;的文件夹。在项目文件夹中。例如,如果您的项目保存在
C:// processingSketch /
然后使用您的代码导入的所有文件都包含诸如
的行
icon = loadShape(&#34; menu.svg&#34;);
或
icon = loadShape(dataPath(&#34; menu.svg&#34;));
将在C:// processingSketch / Data中搜索,如果不存在此类数据文件夹,则无法正常工作。
因此,要么在项目文件夹中创建Data文件夹,请将&#34; menu.svg&#34;在那里找到Android系统中文件的打开目录,并将其包含在代码中。
答案 2 :(得分: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
}
/**************************************************/
}