2016-04-03 20 views
1

p5.js'de bir "deli lib" yapmak için RiTa kitaplığını kullanıyorum. Karakterleri düzgün bir şekilde vermek için, her kelimeyi/karakteri bir dizide bir değer yapmak için rita.tokenize işlevini kullandım. Daha sonra karakterleri düzgün bir şekilde çıktılamak için textWidth() yöntemini kullandım, her bir dizi değerine "" ekleyerek sözcüklerin çalışmaz hale gelmesini sağlayın. Bununla birlikte, bunu yaptığımdan, virgül, periyotlar, soru işaretleri, vb. Etrafında fazladan boşluklar koyarım ve garip görünüyor. Bunları seçici olarak nasıl kaldırabilirim? Ona JavaScript'te bakıyordum ama p5.js ve RiTa için özel olarak hiçbir şey bulamıyorum. Noktalama işaretlerini tanımlamanın ve sonra bunu düzeltmek için bir boole ifadesi kullanmanın bir yolu var mı? Ya da diziyi atlamalı ve bu kodu sabit kodlara mı kullanmalıyım? Yardım için teşekkürler! (Lütfen yorum yaptığım bitleri dikkate almayın, fazladan bir metinle oynuyorum). ClaireP5.js'deki Özel Karakterler Çevresindeki Boşlukları Kaldırma

//Generative Madlib poetry: Find a prose poetry text from Wikisource and 
//replace all nouns and adjectives with random nouns and adjectives. Try adding a rhymescheme. 

var whatupwalt = ("What is it then between us? What is the count of the scores or hundreds of years between us? Whatever it is, it avails not, distance avails not, and place avails not, I too lived, Brooklyn of ample hills was mine, I too walkd the streets of Manhattan island, and bathed in the waters around it.");  
var words = []; 
var lexicon; 
var wordPosX = 10; 
var wordPosY = 25; 
var credit = ("- Walt Whitman"); 
//var click = ("Walt Whitman MadLibs! Click to switch up the poem"); 


function setup() { 
    createCanvas(800,800); 
    lexicon = new RiLexicon(); 


    textSize(20); 
    fill(200,0, 20); 



    words = RiTa.tokenize(whatupwalt); 
    for(var i = 0; i < words.length; i++) { 

    text(words[i], wordPosX, wordPosY); 
    textWidth(words[i], 10); 
    wordPosX += textWidth(words[i]+" "); 
    text(credit, 600, 100); 

    if(wordPosX > 700){ 
    wordPosX = 10; 
    wordPosY += 20; 
    } 
    } 
} 

function mousePressed() { 
    madLibs(); 

    textSize(12); 
    textAlign(LEFT, TOP); 

function madLibs() { 
    var words = "What is " + 
    lexicon.randomWord("nn") + 
    " then between us? What is the " + 
    lexicon.randomWord("nn") + 
    " of the " + 
    lexicon.randomWord("nn") + 
    " or hundreds of " + 
    lexicon.randomWord("nn") + 
    " between us? Whatever " + 
    lexicon.randomWord("nn") + 
    " is, " + 
    lexicon.randomWord("nn") + 
    " avails not, " + 
    lexicon.randomWord("nn") + 
    " avails not, and " + 
    lexicon.randomWord("nn") + 
    " avails not, I too lived, " + 
    lexicon.randomWord("nn") + 
    " of " + 
    lexicon.randomWord("jj") + " " + 
    lexicon.randomWord("nn") + 
    " was mine, I too walkd the " + 
    lexicon.randomWord("nn") + 
    " of " + 
    lexicon.randomWord("nn") + " " + 
    lexicon.randomWord("nn") + 
    " , and bathed in the " + 
    lexicon.randomWord("nn") + 
    " around " + 
    lexicon.randomWord("nn") + "." 


    background(255); 
    textSize(20); 
    text(words, 10, 10, 800-20, 800-20); 
    credit = "-" + " " + lexicon.randomWord("nn") + " " + lexicon.randomWord("jj") 
    text(credit, 580, 120); 
    //rect(375, 240, 375, 220, 400, 240, 400, 220); 
    //text(click, 400, 250) 

cevap

-1

Basit bir if ifadesi kullanarak bunları birleştirirken alanı bırakabilirsiniz. Böyle bir şey:

var wordOne = "one"; 
var wordTwo = ", three"; 
combined = wordOne + " " + wordTwo; 
combined = combined.replace(/ ,/g, ','); 
+0

Teşekkürler, Kevin! Mantığı anlamaya çalışıyorum ... "bir" ve "üç" bir şeyle değiştirebilir veya bu kodu olduğu gibi tutabilir miyim? – Claire

+0

@Claire Bu kod sadece bir örnektir. Mantığı değiştirecek şekilde değiştirirsiniz, ancak siz birleştirmeyi yapıyorsunuz. Ancak temel bilgiler aynıdır: Yalnızca uygun olduğunda bir boşluk eklemek için bir if ifadesini kullanmanız gerekir. –

+0

Üzgünüz, hala kafam karıştı ... p5.js için çok yeni! bu kelimeyi kelimeyle yapmak zorunda mıydım? örnek veya örnek olarak? Bir şeyi dilbilgisel bir karakter olarak tanımanın ve sonra etrafındaki boşlukları çıkarmanın bir yolu yok mu? – Claire

-1

Sadece Rita bir diziye kelimeleri eklemek ve kullanmak: oluşturduktan sonra

var wordOne = "one"; 
var wordTwo = ", three"; 

var combined; 
if(wordTwo.startsWidth(",")){ 
    combined = wordOne + wordTwo; 
} 
else{ 
    combined = wordOne + " " + wordTwo; 
} 

Ayrıca sadece Dize düzeltmek için normal bir ifade ve replace() işlevini kullanabilirsiniz .untokenize();

var words = ['one', ',', 'two', ',', 'three', '.']; 
var result = RiTa.untokenize(words); 
console.log(result); // -> "one, two, three."