2016-03-30 2 views
0

マイカードゲーム(Squibで構築)は、CSVファイルに基づいています。このファイルには、mainという列が1つあります。あなたが見るようにここでSquibの特定の入力値のアイコンのみ表示

はコラムの内容は、... nilがたくさんあります:各カード(行)のために

print data['main'] 
> [3, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 0, 0, nil, nil, 0, nil, nil, nil, 0, nil, nil, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1, nil, nil, nil, nil, nil, -1, nil, nil, nil, nil, 0, 0, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil] 

望ましい行動

  • この列に値がある場合は、SVGを背景として値を表示したいです。
  • は値(nil)が存在しない場合、私は私が

    1を試してみました何

alltogetherテキストやSVGスキップしたい - 私は以下を試してみましたが、data['sprint']arrayではありませんがvalue、そう==は動作しません:

data = Squib.csv file: 'data.csv' 
[...] 
if data['Sprint'] != nil 
    text str: data['Sprint3'], layout: 'sprint3' 
    svg layout: 'block', file: 'svg\left_block.svg'  
end 

2 - だから私は、eachメソッドを使って配列を反復処理しようとしましたが、これの各カードの配列のすべての要素が表示されます。

data['Main'].each do |n| 
    if n != nil 
     text str: n, layout: 'main' 
     svg layout: 'block', file: 'svg\up_block.svg' 
    end 
end 

ルビーの知識はここにあります。 main列の値がnilでない場合にのみ、1つの要素を表示する方法がわかりません。何か案が?ありがとう!

答えて

1

Squibのsvgは、あなたが望むように動作します。ファイルに対してnilを取得した場合、何もしません。だからあなたのレイアウトファイルだけ入れ内:「は、

block: 
    file: 'svg\up_block.svg' 

とレイアウトがnilである場合には、その後のSVG呼び出しは(どんなすべてのカードのためにそれを設定していない)こと、「ファイル」オプション

を持っていませんデフォルトではsvgメソッドの "file"になります。これは何も起こらないnilです。あなたが望むものです。したがって、あなたのデータフィールドは['block'、nil、nil、nil]のようなものになり、最初のカードにしか現れません。

私は、トピックに書いたいくつかの新しい記事チェックアウト: http://squib.readthedocs.org/en/latest/arrays.html http://squib.readthedocs.org/en/latest/guides/getting-started/part_2_iconography.html

(もちろん、進行中の作業、)

をまた、これらも参考にすることができ:https://github.com/andymeneely/squib/blob/master/samples/ranges.rb

if-statementは、Squibが動作するのと同じ方法ではなく、nanDeckがどうやってそれを行うかを思い出させます。あなたは "各"または "選択"でそれを行うことができますが、それは必要以上に複雑です。

(完全な情報開示:私はスクイブのデベロッパー)あなたの答えアンディのため

+0

おかげで、私はその1つの自分自身をovercomplicated考えていました。条件付きロジックの必要がないので、それは良いです:Dしかし、私はまだそれを動作させる方法はまだ分かりません。この 'block 'レイアウトを、裸の' svg' call => 'svg layout:' block''に適用しますか?これは入ってくるデータに反応しないでしょうか?そうでなければ、これを 'text'コールに適用しますか?=>' text str:data ['Main']、layout: 'block''?これは残念なことに私の目的ではまだ機能しません。この場合、svgは表示されません。 –

+0

最終的にあなたの意図を理解していると思います。レイアウトを入力データの一部として設定することを意図していました。レイアウト欄したがって、 'svg layout:data ['layout']'のような呼び出しを使うと、配列が得られ、非 'nil'値だけが考慮されます。この仮定が正しいとすれば、CSVファイルで自分自身を繰り返しすぎることなくこのレイアウト列を作成する方法を知る必要があるだけです(値が列Aにある場合は列Bそうでなければ空のままにしておきます...) –

+0

ええ、それは私が意味するものです。もちろん、 'layout'と呼ぶ必要はありません。' svg layout:data ['faction'] 'のように、あなたのゲームからわかりやすいものを呼び出すことができます。そして、あなたの前提は正しいと思います。あなたのカードをカテゴリに分類し、カテゴリーに応じてスタイルを設定するように考えてください。 – Andy

関連する問題