2012年12月11日火曜日

価値を他人に共有すること

あるモノの価値は、評価する人によってかわる。2人だった場合、相手の趣向が加わり、多人数になった場合、より抽象性がますのだろう。
個人の思考によっているかぎり、その価値を考える人は何を評価するのだろうと自分が考えているので極論では、自分が最高、自分が何をやっても相手が喜ぶと確信してしまっているひとにとっては、相手の事象に対しても自分での価値に変換されるだろう。

なので、より客観的に事象を共有するためには、「モノサシ」という価値をはかるものが必要になってくる。
ただ、評価するものが、単純な長さ、重さならともかく、主観が入ってきそうなかっこいい、かわいいとかを全体に共有する値は、難しい。

最近、洋服を一定の水準にしようと考えた。しかし自分は、基準になる知識もなかったので、ある程度、「お金」が高いモノを選んだ。

自分にセンスに自信がある人は、どんなものを着てもすばらいと胸をはって言えるのだろうが、第三者に説明をしようとしたときに、ここに、青を入れることによってしまるといって理解できないひともいる。
しかし、この服は、10万円したといった場合、結構な価値があるんだねと感じてもらえる。

これは、見た目という意味では、何もみたしていないかもしれないが、周りにたいして洋服の価値について一定の説明をしている。

これは、仕事にもいえるんじゃないかと考えた。
出来上がりが最高なものを目指す考え方(主観)と
プロジェクトを管理(客観)

プロジェクトを進めるにあたって、作る人間とは別に、経営者や戦略を考えるひとによっての価値は、
モノ自体の価値はわからないので、何らかの価値を示さなくてはならない。
それは、時間やお金なのだ。それらをかけると一定の水準のものが生まれると信じられているし、コストに直結するので、判断が単純化する。

価値を他人と共有することは、他人が持っているだろうモノサシではからなくてはいけないので、
身長を体重計ではかるというようなことが常に生じているのではと考えてしまったのだ。

2012年9月27日木曜日

[iOS,Box2D]衝突検知


1,Listenerを使う方法
class ContactListener:public b2ContactListener{
private:
    void BeginContact(b2Contact* contact){
        printf("#BeginContact ");
    }
    void PreSolve(b2Contact* contact, const b2Manifold* oldManifold){
    }
    void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse){
    }
    void EndContact(b2Contact* contact){
    }
};

これを、Worldにセットしてあげればいい。

    b2Vec2 gravity(0.0f, 10.0f);
    world=new b2World(gravity);
    world->SetContactListener(&contactListener);

2,Setpをすすめるときに、直接「contactList」をチェックする
for(b2Contact *contact=world->GetContactList();contact!=nil;contact = contact->GetNext(),i++){
        
        b2Vec2 v= contact->GetFixtureB()->GetBody()->GetLinearVelocity();
        b2Contact *contact2=contact->GetNext();
        
        printf("nomal: %x,%x \n", contact,contact2);
        
        b2Manifold* m= contact->GetManifold();
        int cc=m->pointCount;
        if(v.Length()>0.1){
            printf("v.Length(): %f \n", v.Length());
            printf("cc: %d x:%f y:%f \n", cc,v.x,v.y);
            printf("%d #1-%s \n",i,[((UserData*)(contact->GetFixtureA()->GetBody()->GetUserData())).str UTF8String]);
            printf("%d #2-%s \n",i,[((UserData*)(contact->GetFixtureB()->GetBody()->GetUserData())).str UTF8String]);
        }
        
    }

1,2の方法の違い
通常は1の場合が便利、
2の場合は、接触している間、contactListに入っているので、初回のインパクトかどうかを判断する必要がある。
2はworldだけでなくbodyで取得できるので、対象をしぼったリストを取得することもできる。

2012年8月1日水曜日

[iOS]UIKitでBox2Dを使おう

xCode4.4で作業しました。
プロジェクトはとりあえず、SimpleView

Box2d

http://box2d.org/
をダウンロードしてBox2DフォルダをプロジェクトにDrop.


projectのbuild setting
Always User Search paths :YES
Header serach paths に上記ディレクトリをフルパスで追加
Library search pathsに上記ディレクトリをフルパスで追加

とりあえず、サンプルHelloWorld.cppにあるソースをほぼコピーで動作確認。

ViewController.mmに拡張子を変更して、見た目ようにUiviewを用意しました。



#import "ViewController.h"
#import

@interface ViewController (){
    b2World* w;
    b2Body* body;
}
@end

@implementation ViewController
//@synchronized obj;

- (void)viewDidLoad
{
    [super viewDidLoad];
    b2Vec2 gravity(0.0f, -10.0f);
    w=new b2World(gravity);
    
// Define the ground body.
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0.0f, -10.0f);
    
// Call the body factory which allocates memory for the ground body
// from a pool and creates the ground box shape (also from a pool).
// The body is also added to the world.
b2Body* groundBody = w->CreateBody(&groundBodyDef);
    
    // Define the ground box shape.
b2PolygonShape groundBox;
    
// The extents are the half-widths of the box.
groundBox.SetAsBox(50.0f, 10.0f);

    // Add the ground fixture to the ground body.
groundBody->CreateFixture(&groundBox, 0.0f);

    
    // Define the dynamic body. We set its position and call the body factory.
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(0.0f, 4.0f);
body = w->CreateBody(&bodyDef);

    
    
    // Define another box shape for our dynamic body.
b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(1.0f, 1.0f);

    // Define the dynamic body fixture.
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
    
    // Set the box density to be non-zero, so it will be dynamic.
fixtureDef.density = 1.0f;
    
// Override the default friction.
fixtureDef.friction = 0.3f;
    
// Add the shape to the body.
body->CreateFixture(&fixtureDef);
    
//世界はタイマーですすみます。
    float32 timeStep = 1.0f / 60.0f;
    NSTimer *timer = [NSTimer
                      scheduledTimerWithTimeInterval:timeStep
                      target:self
                      selector:@selector(updateWorld:)
                      userInfo:nil
                      repeats:YES
                      ];

}

-(void)updateWorld:(NSTimer *)timer{
    int32 velocityIterations = 6;
int32 positionIterations = 2;
    w->Step([timer timeInterval], velocityIterations, positionIterations);
    
    // Now print the position and angle of the body.
    b2Vec2 position = body->GetPosition();
    float32 angle = body->GetAngle();
    CGRect rect=self.obj.frame;
    rect.origin.x=position.x*32;
    rect.origin.y=position.y*32;
    self.obj.frame=rect;
    //printf("%4.2f %4.2f %4.2f\n", position.x, position.y, angle);
    
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end



動作確認はできたけど、座標系がUIKitのままだと、逆なのと、スケールもあってないので、調整が必要、32倍してとりあえず動いているのを確認。あと回転とかかな。



2012年6月27日水曜日

[iOS]代入してから変更する理由

最初のころ、viewの位置を動かすときなど、
view.frame.orign.x=100
みたいにやって変更できないことに悩んだ。

以下のようにやるとうまくいく、
CGRect rect=view.frame
rect.origin.x=100.0;
view.fame=rect;

理由を考えずにいたが、考えたら答えがすぐ出て来なかったのでここに書いておきます。

CGRect rect=view.frame
ができていることから、
view.frameがCGRectのコピーを返していることがわかる。

コピー origin.x にアクセスして値を変えてもview.frame自体の値が
変わるわけがないというもっともな答えにいきついた。

CGRectが構造体なのでもっともといえば、もっともな答えでした。

2012年5月7日月曜日

[unity][plugin]Viewを画面に追加する


親のViewを取得しようとして
[UIApplication sharedApplication].delegateから
「iPhone_target2AppDelegate」を取得しようとしたのだけれども、
実は使われてなくて

「AppController」だった。
で、viewは下記のように取得するのが良さそう。


[unity3.5.1]
xcodeにて
extern UIViewController *UnityGetGLViewController();


UIView view=[[UIView alloc]initWithFrame:CGRectMake(0,0, 320, 640)];
view.backgroundColor=[UIColor redColor];
[UnityGetGLViewController().view addSubview:view];

UnityGetGLViewControllerでviewが取得できるのでそこに追加できそう。
拡張子は、.mmじゃないとコンパイルリンクできない。

extern "C"{}の中にbind関数が定義されて、最初動かなかった。取りあえず、括弧の中から外してbuild.

int  UnityGetTargetFPS();とかも使う場面があるかも。



2012年5月6日日曜日

語学の勉強について

最近、UnityやらBlenderやらで英語の動画を見ていて思ったことをつれづれなるままに書いてみる。
英語ができない方に分類される自分でが動画を理解することができた。
なぜだろう。
1、聞きづらいところは、何度も再生することができた
2、内容の基本的な部分は既に本で学習していた
3、そもそも動画なのだから、絵をみれば大体言いたいことがつたわる

1、はメディアの利点
2、は内容予測
3、は情報取得の多様性といったところか

では、中学時代の英語の学習方法で理解できなかったかを考えてみる。
ここでいう中学の英語学習とは、教科書をつかった学習方法である

1、何回でも本なのでよむことはできる
2、初見の内容がほとんどなので、内容予測はできない。
3、挿絵で多少状況は理解できた

以上から、
目的が、暗号解読に用いられるスキルを養うということでなければ、

事前に、直接でなくてもいいから、内容について日本語でおこない、物語なら、Aliceならこんなこと言いそうとか、キャラ設定をしてから、英語をみれば、なるほど、ツンデレな英文なんだなとか思えたのになあと思うし、話に興味がないという以外は挫折しなく、もう少しみにつけられたと思う。

時間とカリキュラムの問題で仕方なかったのかなと思いつつ、何か形にできないかたと模索するのである。

2012年4月1日日曜日

ソーシャル農園ゲームのヒットの秘密

ホンマでっか!?TV - フジテレビにおいて、畑作業は、未来志向性のある行為で、生活に「ハリ」を持たせて長生きにつながるという話をしていた。

そんな話を聞いたとき、ソーシャルゲームの農場系のヒットも同じ理屈がヒットの要因にあるのではないかと思えた。

 そういえば、少し前から、仕事、環境に疲れた社会人の週末農作業が取り上げられてきたが、ソーシャルゲームの農園はそのかわりとして、現代の閉塞感、未来への希望を持てないでいるヒトの心理に、生きるという本能がゲームをさせているのではないだろうか。

従来型ゲームとソーシャル型農園ゲームと比べて仮説を検証してみよう
(従来型ゲーム)
0、要求
  ゲームがしたい。(ゲームそのものが目的)
1、携帯性
  どこでもゲームができるぜ、家でもするけどね。
2、一回のプレイ時間
  長くゲームをしていたい。
3、難しい操作
  操作を覚える快感
4、ソーシャル性
  ゲーム自体にエンターテイメント性があるので
  別に、ヒトに言わなくてもいい。
  映画鑑賞と同じ、感想をヒトに言っても良いが言わなくてもいい。
5、継続性
  新しいものがほしい。
  映画型なのかもしれない

(ソーシャル型農園ゲーム)
0、要求
  生きる希望がほしい
1、携帯性
  家に帰ったら、休みたい。
  家に帰ったら、家事がある
  家に帰って、ゲームを用意するのは億劫だ。
2、一回のプレイ時間
  短時間)
  欲しいのは、ゲーム自体ではなく、ゲームでの結果、ゲームに時間をかけたくない。
3、簡単な操作 
  疲れているのに、なんで複雑なことしなくちゃ行けないの。
  全く操作しないと、自分がやったことにならないので、満足できない。
4、ソーシャル性  導入) 友だちがすすめてるからやっておくか。  結果) 友だちに自慢できるかも。結局しないかもしれないが、結果に価値を持たせている5、継続性
  ゆっくりやっていく。
  結果がすぐでたら次なにを目標に生きていっていいのかわからない。
  ドラマ放送型なのかもしれない。


従来のゲームのユーザとソーシャル農園ゲームユーザの要求は明らかに違っていて、これを従来型に変換するのは、困難だと思われる。
ソーシャルゲームと言われる市場の閉塞感はあるが、従来型に近いユーザ層は、ゲームの本格化を求めていき、市場もそれに応えていったのだが、ソーシャルの主軸は、農園型だったため閉塞していっているのではないだろうかとか考えてみるのである。




2012年2月11日土曜日

本屋の大学受験コーナーに行ってきて、勉強について考えたんだ。

本屋の大学受験コーナーに行ってきて、勉強について考えたんだ。

たまに、学校で習ったことは、役に立たないとか、使わないとかいうけど、
学校のテストの内容に答えることができない社会人はいない。

仕事で、英語を読んで、間違って意味を解釈して許されることはないし、
自分の思いもよらない分野と、自分の専門分野がつながることはよくある。
その際の理解が間違っていてもだめでしょ。

じゃ、なんで学生時代の勉強ができるできないの問題になるかと考えると、
成績の優劣をつけるために、すべての教科をできるできないの問題にわざとしているんだと思う。
ここで求められる能力は、必要な情報を覚えていること。

この能力が社会で生きることは、一時的で、他の人に調べる時間があれば埋められてしまうし、即時答えるより出典とともに情報は答えなければ信用してもえられない。

必要な情報を覚えるという能力が必要なら、すべての教科でそれをはかるのではなく、一つ暗記って教科をつくればいいのにと思う。

では、どのようにすれば、各教科が生きるのだろう。
一つの解決策として僕が提示するのは、すべての教科で参考書を持ち込み可、さらにいえば、インターネット検索可能にすれば、改善されるとおもう。

特に現在は情報の収集と取捨選択し、それを生かす方法が大事、さらに、そこで差がでるような問題を作成すれば、その分野のより深い部分にすすんでいくのではないかと思う。

そんなことを呆然と考えて分かったのは、
そういう訳で、私は「国語」という教科が好きなんだって思うこと。

2012年1月3日火曜日

[iOs][storyboard]別ファイルからのnibの読み込み


[storybordからの取得]
EnemyStoryboard* st =[UIStoryboard storyboardWithName:@"EnemyStoryboard" bundle:nil]


[nibからの取得]
EnemyView* v= [[NSBundle mainBundle] loadNibNamed:@"EnemyView"
                             owner:self options:nil]lastObject];

EnemyViewController* vc=[[EnemyViewController alloc]
                             initWithNibName:@"EnemyViewController" bundle:nil];



(おまけ)
アウトレットの配列管理

@property (strong, nonatomic) IBOutletCollection(UIImageView) NSArray *damagePoint;