PS Vita上手两周总结

临放假前和同事以及哥们一起买了PS Vita准备欢度龙年,裸机+8G卡=¥2390,略贵,但便宜的美版还要一个月,等不起。

回来后就升级到了最新版本软件(两次,够频繁的),游戏也及时升级了,没出现过死机现象。

和之前在网上预先看到的相同,屏幕、机能的改进不是一星半点。主屏上的图标有明显的马赛克,后来仔细一看是3D模型造成的,屏幕本身就算屏气凝神也几乎看不到像素点的边界。既然屏幕大了,必然整体尺寸比PSP大了不少:

游戏方面不锁区确实很好。《神秘海域》值得入手,画面效果和游戏时间综合来看性价比不错。《三国无双NEXT》卖得也太贵了,1.5G的游戏容量,而且只有一条故事线原来是还没玩通的缘故,本作依然有光荣最喜欢的架空历史,虽然把刷各种奖杯的时间算上能延长不少游戏时间,但整体来说比《神海》还贵的价格真是让人觉得诧异。《天启之王》的手感不错,游戏方式类似于MH,如果没有人联机的话乐趣会大大减少。

PSV自带个有趣的功能NEAR,可以看到附近的玩家和热门游戏,例如我周围方圆1公里范围内有60多个人在玩(这么多?今天已经74了)。

总体体验非常好,掌机的未来还会是“专一”功能的。如果玩了3DS和PSV,还有人鼓吹手机游戏是便携型类型游戏的未来,那真的只能笑而不语了。

微软的Playful Programming??

这几天在刷PSV奖杯,结果看到这么个东西:微软的Visual Studio Achievements扩展

作用就是在程序员完成一些“成就”后给予提示和记录,获取相应的称号。例如:

  • 在一个类里面声明100个成员变量(Field Master)
  • 一行代码写300个字符(Scroll Bar Wizard)
  • 使用“Close All But This”10次(Obsessive Compulsive Disorder)
  • ……

看来以后可以加班刷成就啦!

Objective-C学习笔记(1-3)

去年因为项目需要临时学了一段时间Objective-C,可惜直到现在都适应不了这门语言。学习过程中根据不同主题记了一些东西下来,发出来共享,但愿能帮到一些同为入门菜鸟的Objective-C学习者,不过笔记中肯定有错,这个我比较有自知之明。笔记中的所有时间表达(昨天、这段时间)都不以现在为准,因为是好几个月之前写下的。

目录

  1. 构造和拷贝构造
  2. 动态特性和RTTI
  3. 内存管理和标准C区别

01构造和拷贝构造

首先是有关构造函数

我想实现子类基类不同数量参数的构造方式,结果昨天试验了几种方法都不行。

参见下面的代码,Person是基类,实现了一个两参数的构造函数initWithArgs。子类Coder重载了这个方法,多了一个参数,试图重用基类的方法:

// person的构造函数
- (id) initWithArgs : (NSString*) aName andAge:(int) aAge {
Person* person = [[Person alloc] init];
[person setName: aName];
[person setAge: aAge];
return person;
}
// coder的构造函数
- (id) initWithArgs : (NSString*) aName andAge:(NSInteger) aAge andLanguage:(NSString*)aLanguage {
return ???  //这里要返回什么
}

结果昨天尝试了N种方法,全都不行!

// 不行, crash!
if ( self = [super initWithArgs:aName andAge:aAge] ) {
[self setLanguage:aLanguage];
}
return self;

// 不行,没有crash,但是基类的参数name和age都设置失败
[super initWithArgs:aName andAge:aAge];
[self setLanguage:aLanguage];
return self;

// 好用,但我们的基类构造函数不就没用了吗
Coder* coder = [[Coder alloc] init];
[coder setName:aName];
[coder setAge:aAge];
[coder setLanguage:aLanguage];
return coder;

问题在于基类的构造定义,要用[self class]获取到当前self指针的类型才对

Person* person = [[[self class] alloc] init];

子类的构造函数:

Coder* coder = [super initWithArgs:aName andAge:aAge];
[coder setLanguage:aLanguage];
return coder;

或者用更单纯一点的调用:

[self initWithArgs:aName andAge:aAge];
    [self setLanguage:aLanguage];
    return self;

Read more >>>