Code Monkey home page Code Monkey logo

sknodebuilder's Introduction

rrbox

主要な開発言語

  • Swift

ジャンル

  • 2Dゲーム開発

主なプラットフォーム

  • macOS
  • iOS

sknodebuilder's People

Contributors

rrbox avatar

Stargazers

 avatar

Watchers

 avatar

sknodebuilder's Issues

モディファイアの対象のノードは抽象化した方がいい

where Node == XXNode というようになっている(XXNode はたとえば SKSpriteNode とか). Node: XXNode というように XXNode のサブクラスを対象とした方がいいかもしれない. こうすると, API 使用者が XXNode のサブクラス(カスタムクラス)に対して親ノード向けのモディファイアを使っても型が消去されないというメリットが得られる.

  • 抽象化
  • テストコードを追加

add builder object

add(_ builder:) コマンドの実装

  • ChildNodeBuilder ではなく, root の builder を引数に取ることが可能なコマンド
  • 直接 builder オブジェクトを追加するので, add(child: ,build: ) コマンドのようなコールバックを必要としない

Documentation

ドキュメントコメントが全くないので, 整備していく必要があります.


課題

  • index
  • Builder
  • Generator
  • Processor
  • Modifier

Processor

ノードを加工する手順をあらかじめ定義し、未加工のノードを定義された順で加工するオブジェクトを考えたい

サポートするノードの種類を増やす

全てはできないと思いますが, 現在の実装状況を確認するために利用してください.

  • SKNode
  • SKSpriteNode
  • SKLabelNode
  • SKShapeNode
  • SKAudioNode
  • SKEmitterNode
  • SKFieldNode
  • SKTileMapNode
  • SKVideoNode
  • SK3DNode
  • SKEffectNode
  • SKTransformNode

SKConstraint の設定を可能にする

モディファイアで SKNode.constraints の設定ができると便利そうです。
難しいポイントは、SKConstraint によっては別の SKNode インスタンスとの関係性を宣言したい場合があることです。SKNodeBuilder では宣言的に SKNode を作成できるようにしたいので、ビルダー内で SKNode インスタンスを直接扱わなくてもいい API を考えましょう。

Custom modifier

ライブラリの使用者が Builder のモディファイアを作れるようにしたい。いくつかのAPIを公開すれば extension で作成可能にはなるが、そうではなく、モディファイア作成のために新しくAPIを考えたい。

AddChildForEach

Range や Array を使って同じ Node を繰り返し配置できるようにしたい.

addChild メソッドの上位互換を想定している.

`@NodeBuilder` を廃止にするべき

@NodeBuilder 実装時の Builder に相当する Processor はモディファイアにより型が変化するため, v1 ~ v3 当時のように使用することができない.

英語版

README.md, Wiki, Document comment を英語にする

Node 型の名前の変更

型名がオブジェクトの性質に適していないと思われます。
代替案 : " Builder "

RootNodeBuilder

目的 : 循環参照が不可能な実装に変更すること

実装したい内容

  • Builder オブジェクトの body プロパティを unowned にする
  • イニシャライザで SKNode を設定できない Builder を実装 (body は通常の定数で保持する)

README.md の整備

README.md の内容が version 3 のままなので新しい API の内容に書き直す必要があります.

  • 新しい DEMO
  • @NodeBuilder の削除と代替
  • Modifier を作る API の概説と DEMO

Generator

初期化関数もモディファイアの一種と捉えることができる. 直接ノードを初期化しない API にするなら, 初期化もモディファイアと同じように実装するべきである.

Property wrapper

#63 Linked modifier の実装にしてから, property wrapper がうまく機能しなくなった. このまま削除した状態にするのか, 色々検討してから決めたい.

Generator を省略する記述の作成

default というコンピューテッドプロパティを提案します。これは setGeneratorsetProcessor を省略するメソッドになります。SKNode.init() の generator がセットされた状態になります。

`@discardableResult`

@discardableResult はいらないかもしれません. 現在考案中の実装では, Builder から SKNode インスタンスを生成するには必ず node() を実行する必要があります. また, 後から生成する場合も Builder インスタンスを変数等に保持するため, これらのメソッドの戻り値は必ず使用すると結論づけられます.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.