Guten Tag,
ich bin grade dabei ein tower defense spile mit cocos2d zu schreiben. Es gibt eine klasse namens Tower, diese besteht wiederum aus anderen klassen, wie z.b drehturm. Die Tower klasse sieht so aus:
Tower.h
Alles anzeigen
Tower.m
Alles anzeigen
Die Tower klasse setzte ich so:
addToScene sieht so aus:
Nun ist mein problem folgendes, wenn ich z.b den drehturm ändern möchte nachdem ich die sprites zur scene hinzugefügt habe mache ich das so z.b so:
Nun ändert sich das bild des drehturms jedoch nicht, obwohl die klasse von newTower.drehtum der von DrehturmFour entspricht(nach geschaut mit NSLog).
Ich denke das problem ist, dass ich eine komplett neue klasse erstelle und sie auch dem newTower richtig zugewiesen wird. Jedoch ist die klasse die die zur scene hinzugefügt wurde immer noch die alte. Eine idee wäre ja nun die neue klasse drehturm direkt in den speicher vom alten drehturm zu schreiben, somit sollte sich auch das bild, welches angezeigt wird, ändern. Die frage ist nun wie mache ich dies am einfachsten, sollte ich das mit c/c++ pointern machen, oder hat objective-c dafür bessere funktionen??
Joni8a
ich bin grade dabei ein tower defense spile mit cocos2d zu schreiben. Es gibt eine klasse namens Tower, diese besteht wiederum aus anderen klassen, wie z.b drehturm. Die Tower klasse sieht so aus:
Tower.h
Quellcode
- #import <Foundation/Foundation.h>
- #import "cocos2d.h"
- #import "Drehturm.h"
- #import "Radarsystem.h"
- #import "Geschuetzturm.h"
- @interface Tower : NSObject
- {
- CGPoint position;
- Drehturm* drehturm;
- Radarsystem* radarsystem;
- Geschuetzturm* geschuetz;
- NSMutableArray* objects;
- }
- @property (nonatomic, assign) CGPoint position;
- @property (nonatomic, retain) Drehturm* drehturm;
- @property (nonatomic, retain) Radarsystem* radarsystem;
- @property (nonatomic, retain) Geschuetzturm* geschuetz;
- @property (nonatomic, retain) NSMutableArray* objects;
- +(id)createTower;
- @end
Tower.m
Quellcode
- #import "Tower.h"
- @implementation Tower
- @synthesize drehturm;
- @synthesize radarsystem;
- @synthesize geschuetz;
- @synthesize position;
- @synthesize objects;
- +(id)createTower
- {
- Tower* newTower;
- if((newTower = [[[super alloc]init]autorelease]))
- {
- newTower.objects = [[NSMutableArray alloc]init];
- [newTower.objects addObject:[DrehturmOne Drehturm]];
- [newTower.objects addObject:[RadarsystemOne Radarsystem]];
- [newTower.objects addObject:[GeschuetzturmOne Geschuetzturm]];
- }
- return newTower;
- }
- -(void)setDrehturm:(Drehturm *)thedrehturm
- {
- drehturm = thedrehturm;
- drehturm.position = position;
- [objects replaceObjectAtIndex:0 withObject:drehturm];
- }
- -(void)setRadarsystem:(Radarsystem *)theradarsystem
- {
- radarsystem = theradarsystem;
- radarsystem.position = position;
- [objects replaceObjectAtIndex:1 withObject:radarsystem];
- }
- -(void)setGeschuetz:(Geschuetzturm *)thegeschuetz
- {
- geschuetz = thegeschuetz;
- geschuetz.position = position;
- [self.objects replaceObjectAtIndex:2 withObject:self.geschuetz];
- }
- @end
Die Tower klasse setzte ich so:
addToScene sieht so aus:
Nun ist mein problem folgendes, wenn ich z.b den drehturm ändern möchte nachdem ich die sprites zur scene hinzugefügt habe mache ich das so z.b so:
Nun ändert sich das bild des drehturms jedoch nicht, obwohl die klasse von newTower.drehtum der von DrehturmFour entspricht(nach geschaut mit NSLog).
Ich denke das problem ist, dass ich eine komplett neue klasse erstelle und sie auch dem newTower richtig zugewiesen wird. Jedoch ist die klasse die die zur scene hinzugefügt wurde immer noch die alte. Eine idee wäre ja nun die neue klasse drehturm direkt in den speicher vom alten drehturm zu schreiben, somit sollte sich auch das bild, welches angezeigt wird, ändern. Die frage ist nun wie mache ich dies am einfachsten, sollte ich das mit c/c++ pointern machen, oder hat objective-c dafür bessere funktionen??
Joni8a