πΒ μ€λ μ½μ λ²μ : 4μ₯ μ£Όμ
<aside> π μ± μμ κΈ°μ΅νκ³ μΆμ λ΄μ©μ μ¨λ³΄μΈμ.
</aside>
<aside> π€ μ€λ μ½μ μκ°μ? λ μ€λ₯΄λ μκ°μ κ°λ³κ² μ μ΄λ³΄μΈμ
</aside>
νλ‘κ·Έλλ°μ μ²μ μμνμ λμλ 1990λ λ νλ°μ΄μλλ°, μΉκ΅¬λ€κ³Ό κ²μνλ κ²μ μ’μν΄μ κ²μ λ§λλ λ°μ νΉ λΉ μ Έ μμμ λκ° μμλ€. 320*200 ν΄μλ 2dλΆν°, openglμ΄λ directxλ‘ 3dλ₯Ό λ€λ£¨λ©΄μ, 20λ μ΄λ°κΉμ§λ λλ¦ μ΄μ¬ν 곡λΆνμλ κ² κ°λ€. μ΄ λ§μ κΊΌλ΄λ μ΄μ κ° κ·Έλ λΉμμλ νλ‘κ·Έλλ° μμν λ.. νμ
/***********************************************************************
Particle Engine - by pleed
μμ±μΌ: 20XX.XX.XX
************************************************************************/
μ΄λ°μμΌλ‘ ν€λμ λκ° μ 보λ₯Ό μ£Όκ³ μμμ νμλ€. λλ§ κ·Έλ¬λ κ²μ΄ μλλΌ, κ°μ’ λΌμ΄λΈλ¬λ¦¬ κ°μ κ²μ μ΄μ΄λ΄λ μ λ° μμΌλ‘ ν€λμ μ£Όμ μμ±νλ μ½λκ° λ§μλ κ²μΌλ‘ κΈ°μ΅νλ€. κ·Έλ λΉμμλ μ½λ λ²μ κ΄λ¦¬λ₯Ό λλ, μ£Όλ³μμλ μ μ¬μ©μ μ(μ΄λΌ μΌμ§λ§ λͺ»)νκΈ° λλ¬Έμ΄λ€. μ§κΈμ IDEλ λΉμ½μ μΌλ‘ μ’μμ‘κ³ , λ²μ κ΄λ¦¬ μμ€ν λ λ무 μ’μΌλ, μ λ° κ²λ€μ μ¬μ© ν νμκ° μμ΄μ‘λ€.
μ£Όμ λ¬κΈ°λ μ€μνκΈ° λλ¬Έμ, μ£Όμμ 무쑰건 λ¬μμΌ λλ€κ³ μκ°νλ μ μ΄ μμλ€. κ·Έλμ μ£Όμ λ¬ λλ§λ€ νμ μ΄λ»κ² μ£Όμμ μ¨μΌ μ μΈκΉ κ³ λ―Όνμλλ°, μ΄μ λ μ‘°κΈμ κ³ λ―Όμ λ μ μμ κ² κ°λ€. μ£Όμμ μ΄μ¬ν μμ±νλ κ²λ³΄λ€λ μ½λλ₯Ό κ°κ²°νκ² λ§λλ κ²μ λ μ κ²½μ μ°λ κ²μ΄ μ’κΈ° λλ¬Έμ΄λ€. μ± μμλ κ·Έλμ μ£Όμμ νμμ μ΄λΌκ³ κΉμ§ ννμ ν μ λμ΄λ€. μ£Όμμ΄ μ’μ ν¨κ³Όκ° μλ κ²λ³΄λ€ λμ κ²½μ°κ° λ λ§κΈ° λλ¬Έμ΄λ€. κ·Έλ λ€κ³ ν΄μ μ£Όμμ΄ μμ μμΌλ©΄ μ’λ.. νλ κ²μ λ μλκΈ° λλ¬Έμ μ£Όμμ κΌ νμν λλ§ λ¨κΈ°λ κ²μ΄ μ’μμ μκ² λμλ€.
μ λ°μ μΌλ‘ μ± λ΄μ©μμλ μ£Όμμ μ΄λ»κ² μ μμ±μ ν΄λΌ νλ κ²μ μλ€. νμν μΌμ΄μ€λ₯Ό μλ₯Ό λ€μ΄, μ΄λ€ κ²½μ°μλ μ£Όμμ λ¨κΈ°λ κ²μ μ’μλ° κ·Έλ§μ λ μ‘°μ¬ν λ¨κΈ°λΌνλ κ².
μ£Όμμ μμ±νμ§ λ§μμΌ νλ μΌμ΄μ€κ° μ£Όμμ μμ±ν΄μΌ νλ μΌμ΄μ€λ³΄λ€ ν¨μ¬ λ§λ€. κ·Έλ§νΌ μ£Όμ μμ±λ³΄λ€λ μ½λ κ°κ²°μ μ κ²½μ μ°λΌλ κ²μ΄ μ΄ μ±ν°μ κ²°λ‘ μ΄λΌ λ³Ό μ μλ€.
λλ μ§κΈμ μ½λ©κ³Όλ μ ν μκ΄ μλ μ§μ₯μ μκΈ° λλ¬Έμ λ§μ μ½λλ₯Ό μμ±νλ μ¬λμ μλμ§λ§, μ΅κ·Όμ μ€ν΄λ‘ μ±λ¦°μ§μ μ°Έμ¬νλ©΄μ, μ΄ μμ²λκ² νννλ μ΄λ²€νΈλ€μ μ΄λ»κ² μ 리λ₯Ό μ ν μ μμκΉ.. λ§μ΄ κ³ λ―Όμ νμλ€..
// ν΄λΌμ΄μΈνΈκ° λ°© μ°Έκ° λλ λ°© λ§λλ κ²μ μμ²..
socket.on('request_join_room', (roomName) => {
const room = io.sockets.adapter.rooms.get(roomName);
console.log(room);
if (room && room.size !== 1) {
// λ°©μ μ΄λ―Έ λ μ¬λμ΄ μλ κ²..
socket.emit('reject_join_room', roomName);
return;
}
// λ‘λΉ λκ°κ³ , μΌλ¨ λ°©μ μ°Έκ°.
socket.leave('lobby');
socket.join(roomName);
// ν΄λΌμ΄μΈνΈμλ λ°©μ μ°Έκ°νμμ μλ €μ€.
socket.emit('grant_join_room', roomName);
// μ‘΄μ¬νμ§ μλ λ°©μ΄λ©΄.. λ‘λΉμ μλ λ©€λ²λ€μκ² λ°©μ΄ μκ²Όμμ μλ €μ€.
if (!checkRoom(roomName)) {
socket.to('lobby').emit('room_created');
}
});
μ μ½λκ° μλ² μ½λμ μΌλΆλΆμΈλ°, ν΄λΌμ΄μΈνΈκ° μλ²μ μ±ν λ£Έ μ°Έκ°λ₯Ό μμ²νμμ λ μλ²μμ μ΄λ²€νΈ μ²λ¦¬νλ μ½λμ΄λ€. μ΄ μ½λλ₯Ό μ΄λ»κ² μ’ μ 리νλ©΄μ, λμ€μ λ΄€μ λ ν·κ°λ¦¬μ§ μμκΉ κ³ λ―Όν΄μ μ£Όμμ μμ±νλλ°.. μμ§ν μΈ λ° μλ μ£Όμμ λ§μ΄ λ£μ κ² κ°λ€.
μμ κ°μ΄ μμΌ μ΄λ²€νΈ μ²λ¦¬λ.. λͺ λͺ λ²μ΄λ ν¨μ μ±ν°μμ λ°°μ΄ κ²μ²λΌ, λͺ λͺ κ³Ό νκ°μ§ ν¨μλ νκ°μ§λ§ νλλ‘ νλ λ°©ν₯μΌλ‘ μ 리νλ κ²μ΄ μ’μ§ μμμ κΉ μκ°νλ€.
μΈ λ° μλ λ°©μ λμ¬λ μλ€λ λ±.. λ‘λΉ λκ°λ€λΌλ λ±, μ΄λ° κ²μ μ£Όμμ μμ ν΄λ μ¬μ€ μ½λλ₯Ό μ½λλ°λ μ ν μ§μ₯μ΄ μμ΄μ, μΈλ° μλ μ€λ³΅λλ μ£Όμμ΄κ³ , request_join_room
μ΄λ°κ²μ join_request_from_client
, reject_join_room
μ reject_room_full
λ±μΌλ‘ λ°κΎΈλ©΄, κ΅³μ΄ μ£Όμμ μ°μ§ μμλ λμ§ μμκΉ νλ€.