1

我正在编写一个简单的游戏,并认为使用结构会容易得多。但是,我不能声明需要结构的方法。

如何使用结构作为 Objective-C 方法的参数并返回结构的对象?

//my structure in the .h file
struct Entity
{
  int entityX;
  int entityY;
  int entityLength;
  int entityWidth;
  int entityType;
  bool isDead;
};

//And the methods i'm trying to use
-(BOOL)detectCollisionBetweenEntity:Entity ent1 andEntity:Entity ent2;

-(struct Entity)createEntityWithX:int newEntityX andY:int newEntityY, withType:int newEntityType withWidth:int newEntityWidth andLength:int newEntityLength;
4

2 回答 2

3

您可以完全按照您的预期使用结构,您的问题似乎与方法的语法有关:

struct Entity
{
  int entityX;
  int entityY;
  int entityLength;
  int entityWidth;
  int entityType;
  bool isDead;
};

//And the methods i'm trying to use
-(BOOL)detectCollisionBetweenEntity:(struct Entity) ent1 andEntity:(struct Entity) ent2;

-(struct Entity)createEntityWithX:(int) newEntityX andY:(int) newEntityY withType:(int) newEntityType withWidth:(int) newEntityWidth andLength:(int) newEntityLength;

方法中的类型需要在括号中,除非你 typedef 否则你必须引用struct Entity而不是Entity(在普通的 Objective-C 中,Objective-C++ 可能会让你这样做)

于 2012-05-05T16:04:49.723 回答
2

在 Objective-C 中,结构一直被用作参数。例如 Apple 的CGGeometry Reference中的 CGRect

struct CGRect {
  CGPoint origin;
  CGSize size; 
}; 
typedef struct CGRect CGRect;

你只需要为你的结构创建一个类型,这可以像 Apple 一样完成,或者可以作为

typedef struct CGRect {
  CGPoint origin;
  CGSize size; 
} CGRect;

所以在你的情况下:

typedef struct
{
  int entityX;
  int entityY;
  int entityLength;
  int entityWidth;
  int entityType;
  bool isDead;
} Entity;

应该允许你定义

-(BOOL)detectCollisionBetweenEntity:(Entity) ent1 andEntity:(Entity) ent2;
-(Entity)createEntityWithX:int newEntityX andY:int newEntityY, withType:int newEntityType withWidth:int newEntityWidth andLength:int newEntityLength;
于 2012-05-05T16:07:54.430 回答