万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    Creating Games with Unity and Maya



    AndroidのPhoneGap記事

    http://www.atmarkit.co.jp/fsmart/articles/phonegap01/02.html

    Objctive-C size_t用フォーマット文字

    size_t型をprintfやsprintfで表示するときの「変換指定文字」は、"%zd"のように、"z"を使用する

    CGImageRef image = [UIImage imageNamed:@"moji_tex.png"].CGImage;	
    NSLog(@"%zd%zdの大きさ", CGImageGetWidth(image),CGImageGetHeight(image));
    

    NSLogでもつかえる!「d」を忘れずに。

    「Objctive-C OpenGL ES」 CGImageRefを行えば必ずCGImageReleaseを行え

    http://d.hatena.ne.jp/masatoshisw20/20081220/1229727292

    CGImageRef hogeImg = HogeShori;
    // 略
    CGImageRelease(hogeImg);
    

    CGImageRefをやったら、CGImageReleaseをしないといけないみたい?

    The resulting image retains a reference to the original image, so you may release the original image after calling this function.

    ドキュメントに↑が記載されているらしい。

    書籍「OpenGLで作る Android SDKゲームプログラミング」のloadImageでは抜けてるのでメモリリークしそう。

    Objctive-C OpenGL ES上で日本語などの文字を書く(修正版)

    まだ修正が必要と思いますが、コメントください。

    // 文字を書く
    GLuint createCharTexture(NSString* str);
    GLuint createCharTexture(NSString* str, int size);
    GLuint createCharTexture(NSString* str, int size, int r, int g, int b, int a);
    

    ↑書籍「OpenGLで作る Android SDKゲームプログラミング」の「graphicUtil.h」とかに追加する。

    // 文字を描画するテクスチャ
    GLuint createCharTexture(NSString* str){
    	return createCharTexture(str, 2); // デフォは2(中)
    }
    GLuint createCharTexture(NSString* str, int size) {
    	return createCharTexture(str, 2, 255, 255, 255, 255); // デフォルトの文字色白、大きさは2(中)
    }
    // sizeは1・2・3(小・中・大)※4以上もできるが大きすぎると変になるかも?
    GLuint createCharTexture(NSString* str, int size, int r, int g, int b, int a) {
    	
    	GLuint texture;
    		
    	//画像の大きさをを決める(縦横は2の倍数で同じ数字に揃える)
    	size_t width = 512, height = 512;
    	
    	GLubyte* imageData = (GLubyte *) malloc(width * height * 4);
    	//	RGBの描画領域作成。
    	CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    	CGContextRef imageContext = CGBitmapContextCreate(imageData, width, height, 8, width * 4, colorSpace, kCGImageAlphaPremultipliedLast);
    	CGColorSpaceRelease(colorSpace);
    	CGImageRef reflectRGBCGImageRef	= CGBitmapContextCreateImage(imageContext);
    	CGContextDrawImage(imageContext, CGRectMake(0, 0, (CGFloat)width, (CGFloat)height), reflectRGBCGImageRef);
    
    	// 文字列を描画
    	UIFont *tFont = [UIFont systemFontOfSize:25 * size];
    	UIGraphicsPushContext(imageContext);
    	UIColor *color = [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a/255.0f];
    	[color set];
    	// テクスチャへ文字を記載(UIKitとCoreGraphics間の問題?座標系のY軸の上下反転される対策)
    	CGContextScaleCTM(imageContext, 1, -1);
    	CGContextTranslateCTM(imageContext, 0.0f, -(double)480); // NSUInteger型なので、負の値が0にならないようにdouble
        
    	CGPoint point = CGPointMake(0.0f, 0.0f);
    	[str drawAtPoint:point  withFont:tFont];
    	
    	UIGraphicsPopContext();
    	CGContextRelease(imageContext);
    	
    	// OpenGL用のテクスチャ生成
    	glGenTextures(1, &texture);
    	glBindTexture(GL_TEXTURE_2D, texture);	
    	glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
    	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
    	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
    	// 開放
    	CGImageRelease(reflectRGBCGImageRef);
    	free(imageData);
    	return texture;
    }
    

    「CGContextTranslateCTM(imageContext, 0.0f, -480.0f);」ではマジックナンバー(決め打ちの数字)を使用しているので縦横のサイズによって変更すべきです。
    今回、縦×横を360×480にやってます。

    使用方法

    @interface Hoge : GameBase {
    	GLuint mojiID;
    }
    

    Hoge.h

    // initの準備
    // 大きさ「1」で、RGBAを(255, 0, 0 ,255)の赤でアルファなし
    mojiID = createCharTexture(@"書きたい文字", 1, 255, 0, 0 ,255);
    or
    // デフォルトの大きさ「2」になる
    mojiID = createCharTexture(@"書きたい文字");
    or
    // 大きさ「3」になる
    mojiID = createCharTexture(@"書きたい文字", 3);
    
    // draw(描画)のところ 文字の位置はどうやるべきか・・・
    float bg_width = 480.0f;
    float bg_height = 320.0f;
    drawTexture(bg_width/2, bg_height/2, bg_width, bg_height, serifu, 255, 255, 255, 255);
    

    Hoge.m

    今回、自動生成したのでmoji_tex.pngの画像を「Resources」に入れなくて良いです。

    Hatena H3タグ用スタイルシート

    デザイン変更してスタイルシートがリセットされたので今後のためのメモ

    h3 {
    border: 1px solid #666;
    text-align: center;
    background-color: #fff;
    font-size: 18px;
    color: #000;
    margin: 0px;
    padding: 5px;
    }
    

    Penelopeの覚書 Unityのチュートリアル用のため

    iPhoneでの最初のタイトル画面での左から順で
    ◯TAP TO MOVE
    左側に「ジャンプボタン」が1つあるつ
    画面をタップした方向へ移動する
    右側にボタンなし、カメラズームなし

    ◯CAMERA RELATIVE
    左側に移動と方向転換を同時に行う「ジョイスティック」
    右側にカメラの角度を切りかえ、垂直に押せばジャンプする「ジョイスティック」
    「カメラ」は常にPenelopeを追尾し、ズームする

    ◯PLAYER RELATIVE
    左側に移動のみ(↓キーは後ろ向いて背後で移動)して方向転換しない「ジョイスティック」
    右側に方向転換だけするジョイスティック
    左右の「ジョイスティック」を同時垂直押しでジャンプ
    「カメラ」は常にPenelopeを追尾し、ズームする