gpt4 book ai didi

ruby - 使用 Chingu 进行碰撞检测的异常行为

转载 作者:数据小太阳 更新时间:2023-10-29 08:52:57 25 4
gpt4 key购买 nike

我正在尝试各种方法让玩家与元素发生碰撞:

Coin.each_bounding_circle_collision(@player) do |coin, player|
puts "coin collides with player"
end

Item.each_bounding_circle_collision(@player) do |item, player|
puts "item collides with player"
end

@player.each_bounding_circle_collision(Item) do |player, item|
puts "player collides with item"
end

@player.each_bounding_circle_collision(Coin) do |player, coin|
puts "player collides with coin"
end

尽管 Item 是 Coin 的父类,但其中只有第一个和最后一个有效(即我检查 Coin 的那些):

class Item < Chingu::GameObject
trait :timer
trait :velocity
trait :collision_detection
trait :bounding_circle, :scale => 0.8

attr_reader :score

def initialize(options = {})
super(options)

self.zorder = Z::Item
end
end

class Coin < Item
def setup
@animation = Chingu::Animation.new(:file => "media/coin.png", :delay => 100, :size => [14, 18])
@image = @animation.first

cache_bounding_circle
end

def update
@image = @animation.next
end
end

由于我对 Ruby 的总体了解不多,我不明白为什么这不起作用,也许我遗漏了一些明显的东西。任何帮助将不胜感激。

(由于声誉低下,我无法用“chingu”标记它,所以它在下一个最接近的东西“libgosu”下)

谢谢。

(来源:Rubyroids)

最佳答案

遗憾的是,Chingu只是按类记录了所有GameObject实例和GameObject实例,并没有按继承记录。 Chingu 在这里所做的是检查与 Item.all 的碰撞,Item.all 是一组纯 Item 实例,而不是其子类。检查所有 Item 实例的方法是:

@player.each_bounding_circle_collision(game_objects.of_class(Item)) do |player, item|
puts "player collides with item"
end

但是请注意,这非常慢,因为 game_objects#of_class 遍历所有游戏对象,挑选出属于 kind_of 的对象?你想要的类(实际上与新 Ruby 版本中的 Array#grep 相同,但可能更慢)。您可能希望经常记录 Item 实例列表,而不是每次您想要检查碰撞时,这取决于您的游戏中有多少对象。

关于ruby - 使用 Chingu 进行碰撞检测的异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8310542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com