ソースコードを書く


HOME > TIPS > How to make a ScreenSaver > ソースコードを書く

スクリーンセイバーをつくろう

ソースコードを書く

さて、次はソースコードを書くんだ。たいした量はないよ。Objective-C が分からない人でも、魔法の呪文だと思って書き写してくれ。

ここでは 2 つのファイルを作る。ヘッダファイルである 'SSTest.h' と、実装側の 'SSTest.m' だ。'File' メニューの 'New File...' を選んでファイルを作ってくれ。タイプは 'Empty File' でオッケーだ。




SSTest.h

まずはヘッダファイル。これは、スクリーンセイバーモジュールクラスの定義を行うんだ。スクリーンセイバーモジュールは ScreenSaverView を継承することになる。

SSTest/SSTest.h

#import <AppKit/AppKit.h>
#import <ScreenSaver/ScreenSaver.h>

@interface SSTest : ScreenSaverView
{
}

@end

これだけだ。これで、ScreenSaverView を継承した、SSTest っていうクラスを用意したことになる。特にメソッドやフィールドは今回は使わない。


SSTest.m

次は実装側だ。さっきの ScreenSaverView のクラスを実装することになる。

SSTest/SSTest.m

#import "SSTest.h"

@implementation SSTest
- (void)animateOneFrame
{
 // Choose a random point
 int width = [self frame].size.width;
 int height = [self frame].size.height;
 NSPoint pt = NSMakePoint(
  SSRandomFloatBetween(-width, width),
  SSRandomFloatBetween(0.0, height * 2));
 float strSize = SSRandomFloatBetween(12.0, 1024.0);

 // Make a screen color & rect
 NSColor* back =
  [NSColor colorWithCalibratedRed:0.0 green:0.0 blue:0.0 alpha:0.05];
 NSRect rect = NSMakeRect(0, 0, width, height);

 // Make a random color
 float red = SSRandomFloatBetween(0.0, 1.0);
 float blue = SSRandomFloatBetween(0.0, 1.0);
 float green = SSRandomFloatBetween(0.0, 1.0);
 float alpha = SSRandomFloatBetween(0.0, 1.0);
 NSColor* color =
  [NSColor colorWithCalibratedRed:red green:green blue:blue alpha:alpha];

 // Make a string
 NSMutableAttributedString* str =
  [[NSMutableAttributedString alloc]
  initWithString:@"Say Hello to Mac OS X!"];
 [str addAttribute:NSFontAttributeName
  value:[NSFont fontWithName:@"Times" size:strSize]
  range:NSMakeRange(0, 22)];
 [str addAttribute:NSForegroundColorAttributeName
  value:color
  range:NSMakeRange(0, 22)];

 // Draw string
 [back set];
 [NSBezierPath fillRect:rect];
 [str drawAtPoint:pt];
}
@end

ここでは animateOneFrame っていうメソッドを実装している。このメソッドは、スクリーンセイバーのアニメーションが行われている間、定期的に呼び出されるんだ。この中に、実際に画面に表示させる処理を書けばいい。

この中でやっていることは非常に簡単で、ランダムにポジションを決めて、ランダムに色を決めて、文字を書く、ってことだ。ちなみに乱数を発生させてる SSRandomFloatBetween() は、ScreenSaver.framework で用意している関数だ。スクリーンセイバー作るのに必須の機能が用意されてるんだ。うーん、分かってらっしゃる。