-1

概述

我有绘画APP。它注册鼠标事件并将其发送到 NSMutableArray。数组中的后续值被传输到 GLfloat 并像顶点数组一样绘制。因此,所有画笔笔触都会在每次鼠标事件时重绘。

我想做的事?

我想实现撤消重做功能和诸如笔触多样性(柔软度等)之类的东西,所以我需要以某种方式做到每个顶点(鼠标事件位置)都可以有一些额外的设置。我想问这是否可能。

解释

如果用户以100% 的柔软度绘制10 个点(在一次鼠标拖动中),然后将柔软度更改为0%并进行绘制,则必须将前10 个点的笔刷纹理设置为img1,然后将第二个笔触笔刷的纹理设置为img2

如果有可能对数组进行索引(例如像这样的东西NSMutableArray *array[i++] = [[NSMutableArray alloc] init]),我认为可以做一些类似于我想要的很容易的事情。但有可能吗?或者你可以建议任何其他解决方案?

PSNSMutableArray *array[i++] = [[NSMutableArray alloc] init]没有显示任何错误,但也不起作用。


尝试使用NSMutableDictionary

在 mousedown 和 mousedraged 时:

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

在 mouseUp

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具有相同柔软度的点。
  • 将此添加到 aNSMutableDictionary中,其中Key 作为软度级别,Value与此路径数组。
  • 遍历字典得到对应的Key-Value 对并​​画出笔画。
  • 对于UNDO ,只需删除字典的最后一个对象并存储在临时字典中。
  • 对于重做,从临时字典中取回并添加到主字典中。

感谢发布代码。我试过这个,它工作得很好:

- (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 回答