メインコンテンツまでスキップ

xnew.find

xnew.find は、指定したコンポーネントから生成された、現在アクティブな unit すべてを返します。配列を自前で管理せずに、敵への一斉通知・カウンターの一括同期・衝突判定の対象列挙などを行えます。

使い方

const units = xnew.find(Component);

パラメータ:

  • Component: 検索対象のコンポーネント関数

戻り値:

  • 指定したコンポーネント関数で生成された unit の配列

基本

function Counter(unit) {
xnew.nest('<div>');
let count = 0;
unit.element.textContent = count;

return {
increment() {
count++;
unit.element.textContent = count;
}
};
}

// Create multiple counters
const counter1 = xnew(Counter);
const counter2 = xnew(Counter);
const counter3 = xnew(Counter);

// Find all Counter units
const allCounters = xnew.find(Counter);
console.log(allCounters.length); // 3

// Increment all counters at once
allCounters.forEach(counter => counter.increment());

複数インスタンスの管理

function Player(unit, { name }) {
xnew.nest('<div>');
unit.element.textContent = `Player: ${name}`;

let score = 0;

return {
addScore(points) {
score += points;
unit.element.textContent = `Player: ${name} - Score: ${score}`;
},
getScore() {
return score;
}
};
}

// Create players
xnew(Player, { name: 'Alice' });
xnew(Player, { name: 'Bob' });
xnew(Player, { name: 'Charlie' });

// Find all players
const players = xnew.find(Player);

// Add points to all players
players.forEach(player => player.addScore(10));

// Calculate total score
const totalScore = players.reduce((sum, player) => sum + player.getScore(), 0);
console.log('Total score:', totalScore); // 30

ユースケース

  • 一括操作 — 同種のコンポーネントすべてを更新・制御する
  • 状態の同期 — 複数のコンポーネントを同じ状態に保つ
  • ブロードキャスト — 全インスタンスに同じメッセージを送る
  • 一括クリーンアップ — 全インスタンスをまとめて削除する
  • 統計と監視 — アクティブなインスタンス数の集計や分析を行う

返されるのはアクティブな unit のみで、finalize 済みの unit は含まれません。