Try this. The mistake you made is fixed, and it works properly if you're and/or events are moving.
def in_screen? # a display/real value is actually pixels * 4
x = @display_x + Graphics.width * 4 - 1
y = @display_y + Graphics.height * 4 - 1
return @events.values.find_all {|event| event.real_x.between?(@display_x, x) && event.real_y.between?(@display_y, y)}
end
Keep in mind that this doesn't take into account graphic size of the event so events with graphics bigger than 32x32 pixels won't be in the result even if the graphic is visible on the screen, but the event is outside of the screen.