0

私は現在、学校のMATLAB最終プロジェクトに取り組んでいます。プログラミングに関しては、自分自身はかなり知識が豊富で熟練していると思います。しかし、Matlabにはあまりにも多くの奇妙な点があります。

基本的な質問 (答えを見つけた後にこれを実現しました)!値の代わりに変数の名前を使用せずに、GUIハンドルオブジェクトの呼び出しで変数を使用するにはどうすればよいですか?

言い換える と、フィールド名に変数を使用します(これが単純であることがわかっていれば、尋ねることはありませんでした)

私のプロジェクトは、古くからの「戦艦」ゲームの簡単な表現を構築することです。

私の問題:私は現在、船のピース用に5つのオブジェクト(軸)を持っています。それらは、別の場所(グリッド)に移動するために一度に1つずつ選択されます。ボタンをクリックした後、 setpixelposition使用して各オブジェクトを移動できます。

今ボタンクリックの下に、私はこのようなものを持っています

function btnPlaceShip_Callback(hObject, eventdata, handles) 

    %Store the current selected ship(passed from an onclick to a label) 
    ship = get(handles.lblSelectedShip,'string');

    %I have tried everything I could think of, but basically I want to achieve the
    %following

    setpixelposition(handles.ship, [0 250 50 250]) 
    %where the variable 'ship' contains the name of the object.

つまり、var ship ='shipAircraftCarrier'、および..

    setpixelposition(handles.shipAircraftCarrier, [0 250 50 250]) 

動作します!(示された特定の船の位置を設定します)。ただし、変数shipを使用すると、matlabは文字列を文字通り受け取り、その値は受け取りません。代わりに変数を使用すると非常に便利です。

誰かが解決策を持っているなら、私は感謝するでしょう。私はWebを精査しましたが、Matlab GUIに関する基本的な理解が不足している可能性があります-matlabヘルプドキュメントは非常に説明的ではなく、あまり役に立ちません。

4

3 に答える 3

0

他の人が述べたように、動的フィールド名を使用します。それをテストするためのコードはありませんが、単にの周りにブラケットを配置するだけで、文字列が構造名に置き換えられると思います。

setpixelposition(handles.(ship), [0 250 50 250])

可能な限り eval() の使用を避けるようにしてください。

于 2012-04-25T11:45:25.857 に答える
0

動的フィールド名またはgetfieldを使用できます。識別子と文字列を使用したフィールドのインデックス作成は、Matlabstructsと Javascriptで非常によく似ていobjectsます。

マトラブ:

fromId = handles.shipAircraftCarrier; %identifier
fromString = handles.('shipAircraftCarrier'); %string

Javascript:

var fromId = handles.shipAircraftCarrier; //identifier
var fromString = handles["shipAircraftCarrier"]; //string
于 2012-04-24T22:44:21.887 に答える
0

関数を使用してこれを行うことができますがeval、文字列インジェクションに注意する必要があります。

setpixelposition(eval(strcat('handles.',ship)), [0 250 50 250])  
于 2012-04-24T20:22:53.313 に答える