1

この PGMidi のサンプル コードを RubyMotionに変換するにはどうすればよいでしょうか? MIDIPacketList のドキュメントには特別な警告が記載されていますが、RubyMotion でそれらを説明する方法がわかりません。例:

リスト内のパケットは、配列として定義されていますが、可変長であるため、配列としてアクセスできないことに注意してください。

これが例であり、翻訳で得た限りでは、さらに下にあります。

- (void) midiSource:(PGMidiSource*)midi midiReceived:(const MIDIPacketList *)packetList
{
    [self performSelectorOnMainThread:@selector(addString:)
                           withObject:@"MIDI received:"
                        waitUntilDone:NO];

    const MIDIPacket *packet = &packetList->packet[0];
    for (int i = 0; i < packetList->numPackets; ++i)
    {
        [self performSelectorOnMainThread:@selector(addString:)
                               withObject:StringFromPacket(packet)
                            waitUntilDone:NO];
        packet = MIDIPacketNext(packet);
    }
}

「packet」ローカル変数と「packetList」を参照/逆参照するポインターを失っていることはわかっていますが、それを修正する方法を理解するのに苦労しています:

def midiSource(midi, midiReceived:packetList)
  self.performSelectorOnMainThread('addString',
                   withObject:'MIDI received:',
                   waitUntilDone:false)

  packet = packetList.packet[0]
  i = 0
  while i < packetList.numPackets
    i += 1

    self.performSelectorOnMainThread('addString',
                                     withObject:stringFromPacket(packet),
                                     waitUntilDone:false)
    packet = MIDIPacketNext(packet)
  end
end

ご指導ありがとうございます。

4

1 に答える 1

0

探しているポインターを処理している場合は、RubyMotion がPointerクラスを提供します。http://www.rubymotion.com/developer-center/guides/runtime/#_pointers

于 2013-12-11T01:34:20.237 に答える