Wednesday, June 17, 2015

cocos2d-LUA

local GameScene = class(“GameScene",function()


    — return cc.Scene:create()


    return cc.Scene:createWithPhysics()


end)


function GameScene.create()


    local scene = GameScene.new()


    


    scene:addChild(scene:createLayerFarm())


   — scene:addChild(scene:createLayerMenu())


    local edgeBody = cc.PhysicsBody:createEdgeBox( scene.visibleSize, cc.PhysicsMaterial( 1,1 ,0), 3)


    local edgeNode = cc.Node:create()


    scene:addChild( edgeNode)


    edgeNode:setPosition( scene.visibleSize.width * 0.5 , scene.visibleSize.height * 0.5 )


    edgeNode:setPhysicsBody(edgeBody)


    


    scene :getPhysicsWorld():setDebugDrawMask(cc.PhysicsWorld.DEBUGDRAW_ALL)


    local gravity = cc.vertex2F( 0,  100)


    scene:getPhysicsWorld():setGravity( gravity )


    


    


    return scene


end


function GameScene:ctor()


    self.visibleSize = cc.Director:getInstance():getVisibleSize()


    self.origin = cc.Director:getInstance():getVisibleOrigin()


    self.schedulerID = nil


end


function GameScene:playBgMusic()


   — local bgMusicPath = cc.FileUtils:getInstance():fullPathForFilename(“background.mp3″)


  — cc.SimpleAudioEngine:getInstance():playMusic(bgMusicPath, true)


   — local effectPath = cc.FileUtils:getInstance():fullPathForFilename(“effect1.wav")


    cc.SimpleAudioEngine:getInstance():preloadEffect(effectPath)


end


local function makeBall(layer, point, radius, material)


    material = material or MATERIAL_DEFAULT


    local ball


    if layer.ball then


        ball = cc.Sprite:createWithTexture(layer.ball:getTexture())


    else


        ball = cc.Sprite:create(“ball.png")


    end


    ball:setScale(0.13 * radius)


    local body = cc.PhysicsBody:createCircle(radius, material)


    ball:setPhysicsBody(body)


    ball:setPosition(point)


    return ball


end


— create farm


function GameScene:createLayerFarm()


    local layer = cc.Layer:create()


    — add in farm background


    local bg = cc.Sprite:create(“farm.jpg")


    bg:setPosition(self.origin.x + self.visibleSize.width / 2 + 80, self.origin.y + self.visibleSize.height / 2)


    layer:addChild(bg)


    


    


    local sp1 = makeBall(layer, cc.p(self.visibleSize.width / 2 , self.origin.y + self.visibleSize.height / 2), 10);


    layer:addChild(sp1)


    local menuSprite = cc.Sprite:create( “menu1.png" )


       local menuBody = cc.PhysicsBody:createBox( menuSprite:getContentSize(), cc.PhysicsMaterial( 1, 0.5, 0))


       menuSprite:setPhysicsBody( menuBody )


    layer:addChild( menuSprite )


    menuSprite:setPosition( 100 ,100 )


    


   


    local menuSprite2 = cc.Sprite:create( “ball.png" )


   — local menuBody2 = cc.PhysicsBody:createBox( menuSprite:getContentSize(), cc.PhysicsMaterial( 1, 0.5, 0))


    local menuBody2 = cc.PhysicsBody:createCircle( 10, cc.PhysicsMaterial( 1, 0.1, 0))


    menuSprite2:setPhysicsBody( menuBody2 )


    layer:addChild( menuSprite2 )


    menuSprite2:setPosition( 200 ,100 )


    


    return layer


end


return GameScene



cocos2d-LUA

Saturday, May 23, 2015

02 DRM 架構

DRM框架的設計是agnostic 和抽象的specific DRM scheme,具體的DRM插件中的特定DRM方案的實施細節,該DRM框架包括:


  • 簡單的API來處理複雜的DRM運營

  • 註冊用戶和設備到在線DRM服務

  • 從許可證,DRM內容和其許可證的約束中提取信息

  • 並最終解密DRM內容。

DRM框架的設計是實現無關,在抽象的計劃,具體的DRM插件中的特定DRM方案的實施細節。該DRM框架包括簡單的API來處理複雜的DRM運營,註冊用戶和設備在線DRM服務,從許可證,準DRM內容和其許可證的約束中提取信息,並最終解密DRM內容。


AndroidDRM框架兩種架構層實現的:


  • DRM框架API,它是給APP開發者使用的Android應用程序框架,和貫穿Dalvik虛擬機用於標準應用。

  • Native Code DRM管理者,它實現了DRM框架,並公開了DRM plug-ins來處理各種DRM schemes方案的權限管理和解密接口。

 


2


 



02 DRM 架構

01 DRM簡介

介紹


本章節將介紹Android DRM框架的概念,並介紹了DRM外掛必須實現的接口interfaces。


Android平台提供了一個可擴充的框架,DRM可以讓應用程序管理,並且根據與內容相關聯的許可,提供限制權利保護的內容。該DRM framework框架支持多種DRM schemes方案;其中DRM schemes方案的設備,支持設備製造商( up to the device manufacturer)。


在Android 3.0的推出的DRM框架提供了統一接口(unified interface),用於應用程序開發人員和隱藏的DRM操作的複雜性。


DRM框架提供了二種一致的操作模式:


 


  • 保護的內容

  • 非保護的內容

DRM schemes方案可以通過許可元數據metadata定義非常複雜的使用模式。DRM框架提供DRM內容和許可證之間的關聯,並處理權限管理。這使得媒體播放器必須從DRM保護或未受保護內容抽象。


MediaDrm API class是用來獲得密鑰,用於來把受保護的媒體流做解密。


https://developer.android.com/reference/android/media/MediaDrm.html


 


1


 


 


Figure 1. DRM Hardware Abstraction Layer


MediaCrypto class 透過與 MediaCodec 來解碼加密的多媒體,Crypto schemes 加密方案是使用 16 byte UUIDs, 開發者可以透過 method isCryptoSchemeSupported(UUID) 函數,來確認這機器是否有支持該解碼。


在移動設備提共豐富的數字內容(rich digital content)是對用戶很重要的,為了讓內容廣泛使用,Android開發者和數字內容出版商需要通過Android系統來支持的DRM。為了使Android設備上可用的數字內容,並確保至少有一個一致的DRM可以跨所有設備,谷歌提供不用版權費用的DRM在兼容Android系統上。在Android3.0及更高平台上,整個DRM plug-in 結合Android的DRM框架,並可以使用硬件支持的保護,以確保優質內容和用戶使用憑證。


DRM插件中所提供的內容的保護取決於基礎硬件平台的安全性和內容保護功能。該設備的硬件功能包括硬件安全引導建立一個安全機制和保護加密密鑰。


該設備的內容保護功能,包括通過可靠的輸出保護機制,保護設備和內容保護解密。並非所有的硬件平台支持所有上述安全和內容保護功能。


安全並不是僅靠單一個地方實現,而是依賴於硬件,軟件和服務的整合。提供包含硬件的解決方案,和一個可信任引導機構(trusted boot mechanism),和用於處理安全功能的安全OS的結合,是提供一個安全設備的關鍵。



01 DRM簡介

Friday, May 22, 2015

柯博文老师的新书(简体)- 树莓派实战指南-手把手教你掌握100个精彩案例

 


 


 


 


 


 


 


 


柯老師的新書-樹苺派實戰指南-手把手教你掌握100個精彩案例


  • 作者: 柯博文

  • 出版社:清华大学出版社

  • 出版日期:2015-07-1

  • 語言:简体中文

  • ASIN: 

  • 定价:元

  • 京东:  元

  • 当当:  元

  • 亚马逊:  元

 


 


 


 


Screen Shot 2015-05-22 at 10.04.55 AM


 


 


 


 



柯博文老师的新书(简体)- 树莓派实战指南-手把手教你掌握100个精彩案例

Tuesday, May 19, 2015

USB 搖桿安裝與使用

USB 搖桿安裝與使用

下載: https://yukkurigames.com/enjoyable/


 

各位手上如果有USB遊戲搖桿,想要使用在Mac電腦上的話,可以透過這個Enjoyable軟體,來安裝和設定,很快的就能把USB搖桿的按鍵,對應到您所指定或設定的鍵盤滑鼠動作。

 


 


Screen Shot 2015-05-20 at 12.23.04 PM


Screen Shot 2015-05-20 at 12.23.15 PM



USB 搖桿安裝與使用

Raspberry Pi Advanced Projects book

Raspberry Pi Advanced Projects book


price: $2.99


buy on iBook Store


Book Description


With the Feb 29,2012 birth of Raspberry Pi, the world was godsmacked that a computer the size of bsiness card could rival the power of a small desktop computer


Screen Shot 2015-05-20 at 8.24.23 AM



Raspberry Pi Advanced Projects book