2013-05-05 116 views
-3

我開始將我的java knowlege轉換爲最近的目標c,並開始用xcode製作應用程序。儘管如此,我還是有一些困惑的東西。首先在Java中,當我在做自上而下的遊戲,要拍彈的,我會做到這一點有點像:創建類對象objective c

public class Bullet{ 
    int x,y; 
    public bullet(double x, double y){ 
     this.x = x; 
     this.y = y; 
    } 
    public void tick(){ 
     //logic goes in here to move bullet 
    } 
} 

,那麼我有一類具有一個ArrayList:

public class MainClass{ 
    ArrayList<Bullet> bulletlist; 
    public main(){ 
     //create an arraylist that takes Bullet objects 
     bulletlist = new ArrayList<Bullet>(); 
     //add a new bullet at the coordinate (100,100) 
     bulletlist.add(new Bullet(100,100)); 



    } 

    //gameloop(we'll pretend that this gets called every millisecond or so) 
    public void gameloop(){ 
     //loop through list 
     for(int i = 0; i < bulletlist.size(); i++){ 
      //run the method tick() at the current index 
      bulletlist.get(i).tick(); 
     } 
    } 
} 

所以......我的問題是如何將此代碼轉換爲目標c。或者換句話說,我該如何創建一個類似於創建類的對象的示例中的數組列表,然後通過這個循環並調用一個循環方法或者我在裏面創建的任何方法。

+1

Java和Objective-C是完全不同的語言,具有完全不同的對象模型。 – 2013-05-05 22:45:46

+0

其實我可以轉移我的知識......除此之外,它一直很好。我得到了NSMutableArrays的工作,但我想知道如何添加一個實際的類到該數組。 – 36redsoxfan 2013-05-05 22:49:26

+0

你是什麼意思「添加一個實際的課程」? Objc沒有像Java和C++這樣的泛型,你只需要在它之前添加一個對象,就像在1.5之前的java中那樣,當時沒有泛型。 – Kevin 2013-05-05 22:51:33

回答

7

的Objective-C沒有泛型,與Java不同。它沒有多大意義,因爲Objective-C是動態類型的(大部分)。相反,NSMutableArrayNSArray存儲NSObject或其子類型(類似於Java中的ArrayList<Object>)的實例。


這樣的事情應該讓你開始。

@interface MainClass() 

@property(nonatomic, strong) NSMutableArray *bullets; 

@end 

@implementation MainClass 

- (id)init { 
    if (self = [super init]) { 
     self.bullets = [NSMutableArray array]; 
     [self.bullets addObject:[[Bullet alloc] initAtX:100 y:100]]; 
    } 

    return self; 
} 

- (void)gameLoop { 
    [self.bullets makeObjectsPerformSelector:@selector(tick)]; 
} 

@end 
+0

我不得不選擇這個作爲最佳答案。現在我完全理解了!謝謝! – 36redsoxfan 2013-05-05 22:59:17

0

您使用xcode創建了一個由NSObject繼承的新文件,聲明瞭您的標題和正文,並且您的ArrayList<Bullet>可以是一個簡單的NSMutableArray。您的迴路可以這個樣子

NSMutableArray *bulletlist = [[NSMutableArray alloc] init]; 
// fill the array 

for(Bullet *bullet in bulletlist) // or a simple for loop 
{ 
    [bullet tick]; 
} 

的步驟如何創建和declera一類,只是檢查一些蘋果教程:)

+0

「基礎」框架中的所有類都提供了類(或靜態)構造函數以及那些對對象起作用的類。因此:'NSMutableArray * bulletlist = [NSMutableArray array];' – marko 2013-05-05 22:52:53

0

它應該是這樣的:

// bullet.h 
@interface Bullet : NSObject 

@property(assign, nonatomic) CGPoint position; 
- (id)initWithPosition:(CGPoint)position; 

@end 

// bullet.m 
@implementation Bullet 

- (id)initWithPosition:(CGPoint)position { 

    self = [self init]; 
    if (self) { 
     _position = position; 
    } 
    return self; 
} 

@end 

然後,在一些其他類使用子彈(如視圖控制器),聲明一個數組,以保持子彈...

#import "Bullet.h" 

// put this in the class's interface 
@property(nonatomic, strong) NSMutableArray *bullets; 

...並添加一個新的子彈像這樣:

[self.bullets addObject:[[Bullet alloc] initWithPosition:CGPointMake(100,100}]; 

...並反覆子彈像這樣:

for (Bullet *bullet in self.bullets) { 
    NSLog(@"bullet position is %@", NSStringFromCGPoint(bullet.position)); 
} 
+0

Thankyou!我有點困惑,我應該如何通過mutablearray循環。 – 36redsoxfan 2013-05-05 22:55:17

+0

沒關係我不需要再循環它 – 36redsoxfan 2013-05-05 22:59:41

+0

無論如何編輯來說明迭代。 – danh 2013-05-06 00:28:06

0

你的「主類」應該是一個UIViewController。它應該創建一個全屏的UIView在手機上。然後它將一個「CALayer」對象添加爲該視圖圖層的子圖層。

有多種方法可以繪製成CALayer,在這種情況下最好的方法是創建一個CALayer的「BulletLayer」子類並在其中進行繪製。

視圖是用戶可以看到並觸摸的屏幕的矩形。圖層是存儲在視頻卡[非常快速]的內存中的一組像素,可以由您的代碼操作。爲獲得最佳性能,您只能繪製像素一次,然後將它們移動到屏幕上(可以使用動畫等)。

如果您想要了解任何特定部分的具體答案,您應該在檢查每個問題是否已在某個地方得到答覆後,爲每個問題提出一個新問題。