在单独的文件中绘制两个对象

时间:2011-05-14 01:10:53

标签: objective-c drawrect nsbezierpath

Player.m

//
//  PlayerTestAppDelegate.m
//  PlayerTest
//
//  Created by Someguy on 5/13/11.
//  Copyright 2011 Enginering. All rights reserved.
//

#import "Player.h"

@implementation Player
@synthesize window;

//[NSThread sleepForTimeInterval:.1];

// On the program finished loading, do the following..
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {plyr_size = 10; xcord = 200; ycord = 215; [self DrawPlayer];}


- (void)Clearscreen{NSPoint origin = {0,0}; NSRect rect; rect.origin = origin; rect.size.width=1000; rect.size.height=1000; NSBezierPath * path; path = [NSBezierPath bezierPathWithRect:rect]; [path setLineWidth:4]; [[NSColor whiteColor] set]; [path fill]; [[NSColor whiteColor] set]; [path stroke];} 

- (void)DrawPlayer{[self Clearscreen]; NSBezierPath * path = [NSBezierPath bezierPath]; [path setLineWidth:4]; NSPoint center = {ycord,xcord}; [path moveToPoint: center]; [path appendBezierPathWithArcWithCenter: center radius: plyr_size startAngle: 0 endAngle: 360]; [[NSColor grayColor] set]; [path fill]; [[NSColor grayColor] set]; [path stroke];}



//Declare these actions

- (IBAction)PlayerMoveForward:(id)sender {[self PlayerMoveForward];}
- (IBAction)PlayerMoveBackwards:(id)sender {[self PlayerMoveBackwards];}
- (IBAction)PlayerMoveLeft:(id)sender {[self PlayerMoveLeft];}
- (IBAction)PlayerMoveRight:(id)sender {[self PlayerMoveRight];}

// Declare the Methods used for movement

- (void)PlayerMoveForward {xcord=xcord+10; [self DrawPlayer]; [self GetPlayerPostion];}

- (void)PlayerMoveBackwards {xcord=xcord-10; [self DrawPlayer]; [self GetPlayerPostion];}

- (void)PlayerMoveLeft {ycord=ycord-10; [self DrawPlayer]; [self GetPlayerPostion];}

- (void)PlayerMoveRight {ycord=ycord+10; [self DrawPlayer]; [self GetPlayerPostion];}

- (void)GetPlayerPostion {NSLog(@"Player cordinates (%i, %i)",xcord, ycord);}

@end

EntityZombie.m

//
//  EntityZombie.m
//  PlayerTest
//
//  Created by Someguy on 5/13/11.
//  Copyright 2011 Enginering. All rights reserved.
//

#import "EntityZombie.h"
#import "Player.h"

@implementation EntityZombie : Player

//- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {[self FollowPlayer];}
- (void)awakeFromNib{[self FollowPlayer];}

- (void)DrawZombie {if ([self CanSpawnZombie] == TRUE){NSBezierPath * path = [NSBezierPath bezierPath]; [path setLineWidth:4]; NSPoint center = {215,200}; [path moveToPoint: center]; [path appendBezierPathWithArcWithCenter: center radius: 18 startAngle: 0 endAngle: 360]; [[NSColor greenColor] set]; [path fill]; [[NSColor greenColor] set]; [path stroke];}}
- (void)FollowPlayer {
    NSLog(@"Zombie is following player..");
    //zombie_xcord == xcord-1;
    //zombie_ycord == ycord-1;
    [self DrawZombie];
}

- (BOOL)CanSpawnZombie{return TRUE;}

@end

僵尸不会渲染,我有

的日志
2011-05-13 20:59:22.677 PlayerTest[45207:a0f] Zombie is following player..
Fri May 13 20:59:22 Someguy-MacBook-Pro.local PlayerTest[45207] <Error>: CGContextSetFillColorWithColor: invalid context 0x0

1 个答案:

答案 0 :(得分:1)

没有当前的绘制背景。问题出在你调用draw方法的地方。它们需要从-(void) drawRect方法调用,或者,如果您愿意,可以绘制成图像。无论哪种方式,都必须有当前的绘制背景。