-1

概要

私は絵のAPPを持っています。マウス イベントを登録し、NSMutableArray に送信します。配列からの後の値は GLfloat に転送され、頂点配列のように描画されます。したがって、マウス イベントごとにすべてのブラシ ストロークが再描画されます。

私がしたいこと?

元に戻す/やり直し機能や、ブラシ ストロークの種類 (柔らかさなど) などを実装したいので、すべての頂点 (マウス イベントの場所) に追加設定をほとんど持たないようにする必要があります。可能かどうかお聞きしたいです。

説明

ユーザーが100% の柔らかさで (1 回のマウス ドラッグで) 10 ポイントを描画し、次に柔らかさを 0% に変更描画する場合、最初の10 ポイントのブラシ テクスチャをimg1に設定し、2 番目のブラシ ストローク ブラシのテクスチャをimg2に設定する必要があります。

配列にインデックスを付ける可能性がある場合(たとえば、このようなものNSMutableArray *array[i++] = [[NSMutableArray alloc] init])、私が望むものと同様のことを非常に簡単に行うことができると思います。しかし、それは可能ですか?または、他の解決策を提案できますか?

PSNSMutableArray *array[i++] = [[NSMutableArray alloc] init]はエラーを表示しませんが、機能しません。


使用してみてくださいNSMutableDictionary

マウスダウンおよびマウスドラッグ時:

locll = [self convertPoint: [event locationInWindow] fromView:nil];
NSValue *locationValuell = [NSValue valueWithPoint:locll];
[vertices addObject:locationValuell];

マウスアップで

NSString *index = [NSString stringWithFormat:@"%d", aIndex++];
[aDict setObject:vertices forKey:index];
NSArray *allKeys = [aDict allKeys];
NSLog(@"dict count: %ld", [allKeys count]);
NSString *index1 = [NSString stringWithFormat:@"%d", aIndex];
NSMutableArray *a = [aDict objectForKey:index1];
NSLog(@"a count:%li", [a count]);

initWithCoderで

int aIndex = 0;

dict count は、辞書に格納されているオブジェクトの数を返します。そして、それは機能します。しかし、後で辞書から配列を取得しようとすると、配列に含まれるオブジェクトの数を確認すると、0 が返されます。

4

3 に答える 3

1

配列を他のオブジェクトとして操作できるため[YourArray insertObject:YourArray atIndex:i++]]、使用[YourArray objectAtIndex:i]して配列を元に戻すことができます

幸運を

于 2012-07-30T12:57:25.703 に答える
1

私があなたの質問を正しく理解していれば、あなたができることは次のとおりです。

  • すべてのマウス ドラッグは 1 つのパス、つまりNSMutableArray同じ柔らかさレベルのポイントになります。
  • これをソフトレベルとしてのNSMutableDictionaryKeyこのパス配列でのValueに追加します。
  • ディクショナリを反復処理して、対応するキーと値 のペアを取得し、ストロークを描画します。
  • UNDOの場合 、ディクショナリの最後のオブジェクトを削除して、一時的なディクショナリに保存します。
  • REDOの場合、一時ディクショナリからフェッチしてメイン ディクショナリに追加します。

コードを投稿していただきありがとうございます。私はこれを試してみましたが、まったく問題なく動作します:

- (void)viewDidLoad
{
    [super viewDidLoad];
    int aIndex = 0;
    NSMutableDictionary *aDict =[[NSMutableDictionary alloc]init];
    NSMutableArray *vertices = [[NSMutableArray alloc]init];
    [vertices addObject:@"one"];
    [vertices  addObject:@"two"];
    [vertices addObject:@"three"];

    NSString *index = [NSString stringWithFormat:@"%d", aIndex++];
    [aDict setObject:vertices forKey:index];

    NSArray *allKeys = [aDict allKeys];
    NSLog(@"dict count: %d", [allKeys count]);  // Prints 1

    NSMutableArray *a =[aDict objectForKey:index];
    NSLog(@"a item count is :%d", [a count]);   // prints 3
}

注: 渡すインデックスには注意してください。

于 2012-07-30T13:11:32.973 に答える
1

ベクトルまたは VAO を作成し、ブラシ ストロークごとに VAO を追加できます。ブラシの種類などの追加情報も保持するクラスで VAO をラップします。これにより、各ストロークのタイプを識別し、正しくレンダリングできるようになります。

于 2012-07-30T13:12:11.930 に答える