Ming Apps

Posts Tagged ‘xcode

Xcode logo

當我在做FYP之時,

第一個遇上的問題就是這個!

為甚麼我畫線(Line Drawing)的時候,

條線一D都唔smooth!

objective-c tutorial: not smooth line demo

找尋良久,

終於讓我發現了一個很有趣的原因。

原來大部份電子產品,

都是利用了fixed sampling rate的設計,

意思即是每隔一千分之一秒(depends on你hardware, 可以係60分之一秒),

才會讀取user的input之類。

所以ipad的設計拿取touch point的數值之後,

點與點(point to point)之間的距離變得這樣大,

看來就不像曲線了。

所以要靠計數的方法!

Calculation 計返中間曲線的點!

Ming Apps Objective-c tutorial demo: line smoothed by spline

原來呢一招係Microsoft小畫家(mspaint)亦都需要用到呢~

招式正統名稱為: Spline Interpolation

比較常見的是Hermite spline or Cubic Hermite spline兩種。

筆者數學能力尚淺,

所以筆者還是找來了一個我在FYP中使用的方式,

主要是從cocos2d forum找來的c program code,

(不是objective-c! 因為我的program code改了還是貼上原文的code吧~)

void genCubicInterpolation(CGPoint *points, unsigned num, unsigned segments, CGPoint *vertices)
{
    int count = 0;
    float dt = 1.f / (float) segments;

    if (num < 2) return;

    // We need two extra points
    CGPoint d0, dN;

    d0 = ccpAdd(points[0], ccpNormalize(ccpSub(points[1], points[0])));
    dN = ccpAdd(points[num-1], ccpNormalize(ccpSub(points[num-1], points[num-2])));

    for (int i=0; i<(num-1); i++) {
        vertices[count] = points[i];
        count++;

        CGPoint y0, y1, y2, y3;

        if (i==0) {
            y0 = d0;
        } else {
            y0 = points[i-1];
        }
        y1 = points[i];
        y2 = points[i+1];
        if (i==(num-2)) {
            y3 = dN;
        } else {
            y3 = points[i+2];
        }

        for (float mu=dt; mu < 1.f; mu += dt) {
            CGPoint a0, a1, a2, a3, p;
            double mu2 = mu * mu;

            // Two variants, the second is smoother

            // First
            a0.x = y3.x - y2.x - y0.x + y1.x;
            a0.y = y3.y - y2.y - y0.y + y1.y;

            a1.x = y0.x - y1.x - a0.x;
            a1.y = y0.y - y1.y - a0.y;

            a2.x = y2.x - y0.x;
            a2.y = y2.y - y0.y;

            a3.x = y1.x;
            a3.y = y1.y;

            // Second, the same as Catmull/Rom
            /*
            a0.x = -0.5f * y0.x + 1.5f * y1.x -  1.5f * y2.x + 0.5f * y3.x;
            a0.y = -0.5f * y0.y + 1.5f * y1.y -  1.5f * y2.y + 0.5f * y3.y;

            a1.x = y0.x - 2.5f * y1.x + 2.f * y2.x - 0.5f * y3.x;
            a1.y = y0.y - 2.5f * y1.y + 2.f * y2.y - 0.5f * y3.y;

            a2.x = -0.5f * y0.x + 0.5f * y2.x;
            a2.y = -0.5f * y0.y + 0.5f * y2.y;

            a3.x = y1.x;
            a3.y = y1.y;
             */

            // The point
            p.x = (a0.x * mu * mu2) + (a1.x * mu2) + (a2.x * mu) + a3.x;
            p.y = (a0.y * mu * mu2) + (a1.y * mu2) + (a2.y * mu) + a3.y;

            vertices[count] = p;
            count++;
        }
    }

    vertices[count] = points[num-1];
}

大家嘗試自己將它變做自己的sourcecode吧!

注:  The vertices array must have a length of ((num-1)*segments)+1!!!

Cocos2d for iPhone Logo cocos2d-iphone 第一步: installation!

起步第一件事就係要有Mac 10.6 and install Xcode!

相信大家都知道 Xcode 就是寫iPhone Apps / iPad Apss最基本的程式了。

如果你並未擁有iOS Developer Program Member / Mac Developer Program Member的話,

只可下載 Xcode 3.2.6 and iOS SDK 4.3, 但必需登記成為iOS developer 才可下載。


注意: Xcode 4和Xcode 3 安裝方法有所不同!

由於我已成為了iOS Developer Program Member($99USD!),

現示範如何「安裝」cocos2D for iphone for Xcode 4.

大家首先要下載cocos2d-1.0.0-beta-templates,

然後到: ~/Library/Developer/Xcode/Templates Folder,

(注意: 你可能需要在以上Directories入面開New Folder, 請依足名稱大小寫。)

extract以上.tar.gz 的Achieve files,

搞點!

Xcode new project cocos2d-iphone project

Xcode 4 create new project下已經可以見到以下的選擇了!

你現在已經可以開始寫你的Cocos2d Apps了!

哈哈這個installation看來並不似installation吧哈哈~

Xcode 3又如何呢?

你需要下載另一個cocos2d-iphone的version: cocos2d-iphone-0.99.5

下載完,按步驟立即使用便成!

Cocos2d for iPhone Logo

原本網頁: http://www.cocos2d-iphone.org/

一個月前,FYP的topic由html5 web apps轉做iPad apps,

真的徬徨無助哈~

 

找了很多很多objective-c framework,

朋友介紹了這一個framework.

Fast, Free, Easy to Use, Community supported.

Google一下你的問題再加"cocos2d“做keywords,

好多問題都解決了~

有唔少Class會經常用到:

CCLayer / CCLayerColor(舊有的ClassName為CCColorLayer): Layer that receive touches and 設定初始背景顏色!

CCLayerColor *layer = [[CCLayerColor alloc] init];
[layer setColor: ccc4(255, 255, 255, 255)];

CCMenu / CCMenuItem: Default了一堆方便你堆砌Menu既Class!

[CCMenuItemFont setFontName:@"Helvetica"];

CCMenuItem *menuItem1 = [CCMenuItemFont itemFromString:@"HelloWorld" target:self selector:@selector(scene1:)];
CCMenuItem *menuItem2 = [CCMenuItemFont itemFromString:@"Test"];
CCMenu *menu = [CCMenu menuWithItems:menuItem1, menuItem2,nil];

[menu alignItemsVertically];
[menu setPosition:ccp(240, 160)];
[self addChild:menu];

CCLabelTTF(舊有的ClassName為CCLabel/Label):  故名思義, 就是LabelText, 純粹Display String/ Display Text

CCLabelTTF *test = [CCLabelTTF labelWithString:@"Testing" fontName:@"Marker Felt" fontSize:16];
 [self addChild:test];

CCSprite: Google了Sprite的解釋,是指小精靈/小妖精。如果你寫Game, 我會當佢做一個人物角色,可以任意係畫面複製角色於Layer / RenderTexture 上。

CCDirector: 導演一名,可設定Frame per second既時間,加速減速自己決定。

[[CCDirector sharedDirector] setAnimationInterval:1/240.0];

 

暫時已經support Xcode 3 & Xcode 4,

雖然仍在develop階段,

但好期待佢去version 1.0既正式版!

之後的Blog應該會有更多cocos2d的介紹!


%d 位部落客按了讚: