【问题标题】:How do I embed icons into text within Squib only on certain cards?如何仅在某些卡片上将图标嵌入到 Squib 中的文本中?
【发布时间】:2015-08-05 01:25:58
【问题描述】:

这正是我想要做的:每当我的一张卡片在我的 .csv 的“能力”列中包含文本“获得 1 贡品”时,输出就是“获得 1 [我的贡品图标]”在卡片的文本框,经过格式化,使其成为常规技能文本的一部分。这可能吗?

附:另外,如何使图标具有透明背景?我已经从 game-icons.net 中保存了它们,但它们总是以白色背景显示。这是我尝试过的:

require 'squib'
require 'game_icons'

Squib::Deck.new(cards: 4, layout: %w(hand.yml layout.yml), width: 825, height: 1425) do
  background color: '#FFFFFF'
  rect x: 0, y: 0, width: 825, height: 1425, x_radius: 38, y_radius: 38
  data = csv file: 'country.csv'
  png file: data['Art'], layout: 'Art'
  png file: 'textbox.png', x: 50, y: 890
  png file: 'titlebox.png', x: 65, y: 30

  tribute = data['Tribute']
    colorl = tribute.collect { |x| fg(x) }
    background color: tribute.map.with_index { |x,i| bg_grad(x, attrr[i]) }
    text str: data['Tribute'], layout: :Tribute, color: colorl
    svg file: tribute.collect {|x| icon(x)}, layout: :TributeIcon
  end

  %w(Title Ability Quote Type Subtype).each do |key|
    text str: data[key], layout: key, markup: true
  end

  %w(Tribute Power Dominion).each do |key|
    svg file: "#{key.downcase}.svg", layout: "#{key}Icon"
    text str: data[key], layout: key
  end

  save_png prefix: 'country_'
end

但是,我现在遇到了预期的输入结束错误!

【问题讨论】:

    标签: ruby squib


    【解决方案1】:

    由于Squib::Deck.new() do... 构造需要单个值或所有内容的列表,因此您需要在现有数组(可能有多个)上使用类似.collect 的东西,因为我不知道如何将图像插入文本。

    所以,你需要类似...

    ability = csvfile['Ability']
    ability_offset = ability.collect { |x| choose_offset(x) }
    ability_icon = ability.collect { |x| choose_icon(x) }
    ability_icon_x = ability.collect { |x| choose_icon_loc(x) }
    

    然后像往常一样在您的textsvg 命令中使用这些列表,可能在没有可显示的情况下使用空存根图像,以保持一致性。

    至于图像,查看几个示例,会使用黑色透明图标并手动或自动编辑文件,以便<path> 包含一个@ 987654328@ 属性,也许还有stroke="black",如果有用的话。

    【讨论】:

    • 感谢您的回复。真的很烦人,我无法在我的 cmets 中格式化代码来向你展示我在做什么!我添加了你的块,但我不是一个程序员,我认为我做的不对;它只是给我一个 NameError 消息。我需要更改您包含的 x 吗?至于图像,填充=“白色”不会给我一个白色背景吗?我希望保持透明背景。
    • 收集绝对有帮助。但我也很惊讶地看到两个使用data['Ability']text 调用。为什么打两个电话?在我看来,Ability 应该从%w( ).each 构造中取出,并且它上面的一个调用应该引用layout: 'Ability'。此外,另一种将调用限制为仅几张卡片的方法是使用 range 选项。
    • 行吗?那么有人可以准确地解释一下我实际放入块中以使其工作的内容吗?谢谢!
    • 哦!抱歉,我认为您不是从编程之外来到 Squib 是愚蠢的。是的,您需要编写我称为choose_offset 的方法等等。对于评论线程,可能对基本 Ruby 的讨论过于详细,但如果你可以从一个示例中工作,我在几周前就玩了很多这样的 on GitHub。这没有什么令人兴奋的,但有很多相同的想法,我最终使用了相同的 SVG 技巧。
    • 我已经尝试使用您的示例,但似乎卡住了。我用代码更新了原始帖子,因为我无法在 cmets 中对其进行格式化。你介意让我知道我做错了什么吗?谢谢!
    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多