I'm new in Processing and with Tutorials, Onlinesketches etc. I've created a sketch which shows rss feed lines, if you clap your hands or do a loud sound. Since I've pasted the code of a drop down menu in it, I get the error: A null PFont was passed to textFont().
The code includes two Fonts "Arial-BoldMT-22.vlw" and "ArialMT-22.vlw" as well as two png-Pictures "logo" and "logoklein". You can replace them with whatever you want, just to see how my code works.
The Code is splitted in three menus.
Menu #1:
/** * Clap to load another RSS Feed, click on the news to move them, * news fade out after the 20th. * * (c) 2012 M. Maier */
//----------------------------------------------------------------------- // Main Menu //-----------------------------------------------------------------------
void setupMainMenu() { SMenu m=new SMenu(this); // create new main menu (at 0,0) m.SMSubM("File"); // new submenu m.SMSubM("Import"); m.SMItem("FAZ", new actn() { public void a() { p = 0; } } );
m.SMItem("BILD", new actn() { public void a() { p = 1; } } ); m.SMItem("Süddeutsche", new actn() { public void a() { p = 2; } } ); m.SMItem("Weltonline", new actn() { public void a() { p = 3; } } );
m.SMEnd();
m.SMItem("Close", new actn() { public void a() { exit(); } } ); // overwrite act.a() with own proc
m.SMEnd();
m.SMSubM("Save"); m.SMItem("png", new actn() { public void a() { s="png clicked"; } } ); m.SMItem("tiff", new actn() { public void a() { s="tiff clicked"; } } );
m.SMItem("targa", new actn() { public void a() { s="targa clicked"; } } );
m.SMItem("jpeg", new actn() { public void a() { s="jpeg clicked"; } } );
m.SMEnd();
m.SMSubM("Help"); m.SMItem("About", new actn() { public void a() { About(); } } );
// Arrays für jede Art von Werten titles = new String[Anzahl]; positions =new PVector[Anzahl]; myFonts =new PFont[Anzahl]; myFontSize = new int[Anzahl]; BlockgroesseX = new int[Anzahl]; BlockgroesseY = new int[Anzahl];
for (int i = 0; i < titleXMLElements.length; i++) { String title = titleXMLElements[i].getContent(); titles[i]=(new String(title)); }
//immer wenn geklatscht wird fülle die werte abhängig vom Zähler CurrentTitle
positions [CurrentTitle] = (new PVector(random(width/2), random(70, height))); // Positionen PFont font = createFont(fontList[(int)random(0, fontList.length)], 10); // Fonts myFonts[CurrentTitle] = font; myFontSize[CurrentTitle] = (int)random(14, 200); // Font Size
CurrentTitle += 1;
// wenn CurrentTitle die Maximalanzahl erreicht hat setze CurrentTitle auf 0 // ab jetzt werden schon vorhanden Werte in den Listen neu überschrieben // alle anderen bleiben in der Liste bis sie überschrieben werden if (CurrentTitle >= Anzahl) { CurrentTitle = 0; } }
// solange die Liste noch nicht die maximalanzahl erreicht hat zähle hoch
if (CurrentTitle < Anzahl && fullList == false) { for (int j = 0; j < CurrentTitle; j++) { int TheTextSize = myFontSize[j]; textFont(myFonts[j], TheTextSize); String newString = titles[j];
// ermittle die Groesse der Textbloecke BlockgroesseX [j] = (int)textWidth(newString); BlockgroesseY [j] = TheTextSize;
// wenn die Maus über einem der Blöcke ist übergebe ihm den Mauswert als Koordinate if (mousePressed) { if (mouseX > (newPosition.x) && mouseX < (newPosition.x+BlockgroesseX[j]) && mouseY > (newPosition.y-BlockgroesseY[j]) && mouseY < (newPosition.y) ) { println("über String Nummer " + j); newPosition.x -= (pmouseX-mouseX); newPosition.y -= (pmouseY-mouseY); } } } } else // wenn sie die Maximalanzahl erreicht hat zeichne das vorhandene und ändere immer nur das was CurrentTitle entspricht (von 0 bis 20) { for (int j = 0; j < Anzahl-1; j++) { int TheTextSize = myFontSize[j]; textFont(myFonts[j], TheTextSize); String newString = titles[j]; PVector newPosition = positions[j]; text(newString, newPosition.x, newPosition.y);
// wenn die Maus über einem der Blöcke ist übergebe ihm den Mauswert als koordinate if (mousePressed) { if (mouseX > (newPosition.x) && mouseX < (newPosition.x+BlockgroesseX[j]/2) && mouseY > (newPosition.y-BlockgroesseY[j]) && mouseY < (newPosition.y) ) { newPosition.x -= (pmouseX-mouseX); newPosition.y -= (pmouseY-mouseY); } } } }
if (CurrentTitle == Anzahl-1) { fullList = true; } }
/* void keyPressed() { if (key=='s') saveFrame("##.png"); //save .png bei keyPressed oder saveFrame("##.tif") oder saveFrame("##.tga") }*/ }
void mousePressed() { if (startbildschirm == true) { startbildschirm = false; fill(255, 255, 255, random(20, 255)); } // deaktiviert ihn, wenn man mit Maus klickt }