有没有人知道是否有一个Rails gem/plugin/tutorial,它显示了如何创建类似于stackoverflow使用的Badge/Achievement系统.
谢谢.
我正试图在Ruby on Rails中设计一个成就系统,并且遇到了我的设计/代码.
试图使用多态关联:
class Achievement < ActiveRecord::Base
belongs_to :achievable, :polymorphic => true
end
class WeightAchievement < ActiveRecord::Base
has_one :achievement, :as => :achievable
end
Run Code Online (Sandbox Code Playgroud)
迁移:
class CreateAchievements < ActiveRecord::Migration
... #code
create_table :achievements do |t|
t.string :name
t.text :description
t.references :achievable, :polymorphic => true
t.timestamps
end
create_table :weight_achievements do |t|
t.integer :weight_required
t.references :exercises, :null => false
t.timestamps
end
... #code
end
Run Code Online (Sandbox Code Playgroud)
然后,当我尝试下面的抛弃单元测试时,它会失败,因为它表示该成就为空.
test "parent achievement exists" do
weightAchievement = WeightAchievement.find(1)
achievement = weightAchievement.achievement
assert_not_nil achievement
assert_equal 500, weightAchievement.weight_required
assert_equal …Run Code Online (Sandbox Code Playgroud) 我喜欢我正在设计的网站的徽章和成就的概念.它们已经被证明可以提高消费/使用率,我认为这可能是我想要开发的应用程序的一大动力.
从高层次来看,我可以想到3种方法.
检查满足cron工作要求的成员:这对我来说似乎不是一个好主意,因为成员数量增加,cron工作需要更长时间才能完成.
每次动作完成后,可能满足徽章的要求,检查是否任何徽章应该颁给:这似乎是一个好办法做到这一点,但似乎我可能砸向服务器上的徽章连续检查已被授予或用户可能甚至不接近.
每次用户完成可以获得徽章的操作时,请检查他们是否已经拥有徽章,然后检查它们是否符合要求:这似乎也没问题,但如果我将用户存储为对象,则看起来像它可能会变得非常大,或者我可能最终会非常难以检查数据库以检查成就.
我有什么选择吗?我对一种或多种方法的担忧是否被夸大了?
编辑: 这是一个比我想象的要少得多的问题,还是在一个糟糕的时刻问我?我有什么不清楚的地方吗?
我有一个GameCenter Sandbox-Account测试了我的游戏,获得了成就等等.现在我做了一些改变,想再次测试收入成就!
我是否必须制作一个全新的沙盒帐户,或者有没有办法重置我的帐户?
我的数据库中已有很多现有数据,并希望开发一种点机制,根据每个用户的操作计算每个用户的分数.
我以可插入的方式实现此功能,因此它独立于主逻辑,并且在实体被修改后依赖于发送的Spring事件.
问题是如何处理现有数据.我不想从现在开始收集积分,而是包括所有数据,直到现在.
最实用的方法是什么?我是否应该以提供index()方法的方式设计我的插件,这将强制我的系统从数据库中获取每个单独的实体,发送EntityDirtyEvent,为每个插件触发每个插件,然后更新它,让点被保存在每个实体旁边.这可能会导致很多开销,对吧?
最简单的方法是创建一个复杂的存储过程,然后使index()调用该存储过程.然而,在我看来,这似乎也是一件坏事.既然我必须编写用于计算java中的点的逻辑,为什么还要在SQL中再次使用它?此外,一般而言,我不喜欢将业务逻辑分成不同的层.
有没有人这样做过?请帮忙.
我本周在Google Play商店推出了一款应用.该应用使用Google Play游戏排行榜和成就API.播放商店应用中的应用页面是否应该像使用这些API的其他应用中那样显示这些图标/徽章?我需要在任何地方启用它吗?
这些是我所指的图标/徽章(下图).我如何添加/启用这些?我需要在应用程序apk中做任何事情才能获得这些吗?

精简版:
我有类似StackOverflow的设置.用户获得成就.我有比SO更多的成就,让我们说10k的顺序,每个用户都有100多个成就.现在,您如何推荐(推荐)用户尝试的下一个成就?
长版:
在django中对象建模如下(仅显示重要部分):
class User(models.Model):
alias = models.ForeignKey(Alias)
class Alias(models.Model):
achievements = models.ManyToManyField('Achievement', through='Achiever')
class Achievement(models.Model):
points = models.IntegerField()
class Achiever(models.Model):
achievement = models.ForeignKey(Achievement)
alias = models.ForeignKey(Alias)
count = models.IntegerField(default=1)
Run Code Online (Sandbox Code Playgroud)
我的算法只是找到与登录用户共享成就的每个其他用户,然后完成所有成就并按出现次数排序:
def recommended(request) :
user = request.user.get_profile()
// The final response
r = {}
// Get all the achievements the user's aliases have received
// in a set so they aren't double counted
achievements = set()
for alias in user.alias_set.select_related('achievements').all() :
achievements.update(alias.achievements.all())
// Find all other aliases that have …Run Code Online (Sandbox Code Playgroud) 因此,我想将 GameCenter 成就合并到我的游戏中,但我必须为每个成就提供图像以在 GameCenter 应用程序中显示。苹果并不清楚所需的尺寸。我在网上读到他们要求 512 像素的图像,但随后他们将图像缩小到 32 像素,这使得图像变得模糊和/或像素化。
一定有更好的方法。我现在已经看到一些应用程序具有清晰的成就图像。他们如何做到这一点?谢谢。
让我感到好奇的一件事是网络游戏如何能够实时处理真正新颖或独特的成就,并立即给你一个徽章.
简单的事情就像获得10次杀戮或者完成一个级别似乎很容易,但是像跳过某人一样,将你的剪辑中的每一颗子弹射杀一个人的东西 - 或类似的东西似乎是非常疯狂的编程.
他们是否只有一个大型处理器,可以读取所有活动的实时日志,并且不断计算每项成就 - 或者是将游戏本身编入的成就计算到游戏逻辑中?似乎后者并非如此,因为游戏的新成就经常出现.
对于这种事情,是否有完善的模式或架构?
我对成就获得的 XP 量进行了更改。现在我想重置用户的成就,以便重置他们的XP。目前来说太多了。新成就将奖励新 XP,但旧 XP 在 Google Play 游戏中仍然可见。
我尝试按照本指南操作我的开发者帐户,但没有成功: https ://developers.google.com/games/services/management/api/achievements/resetAll
它的结果{不是页面上列出的结果。
有任何想法吗?
achievements ×10
android ×2
badge ×2
game-center ×2
java ×2
reset ×2
cocoa-touch ×1
django ×1
google-play ×1
hibernate ×1
ios ×1
iphone ×1
leaderboard ×1
online-game ×1
optimization ×1
python ×1
sandbox ×1
spring ×1