카테고리 없음

TeamProject_PokéGotchi - 3일차

juni_shin 2024. 7. 10. 02:30

수박 게임 준비 중

 

물리엔진 Matter.js 사용법

https://velog.io/@rificul/%EB%A6%AC%EC%95%A1%ED%8A%B8%EC%97%90%EC%84%9C-Matter.js-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0#%EC%B5%9C%EC%A2%85-%EC%BD%94%EB%93%9C

 

리액트에서 Matter.js 사용해보기

참고)https://brm.io/matter-js/https://paulie.dev/posts/2020/08/react-hooks-and-matter-js/리액트에서 Matter.js를 사용하여 바닥을 만들고 공을 생성해보기npm i matter-js

velog.io

 

TS로 개발한 github

https://github.com/MycroftKang/Suika

 

GitHub - MycroftKang/Suika: Suika Game with Bomb

Suika Game with Bomb. Contribute to MycroftKang/Suika development by creating an account on GitHub.

github.com

 

JS로 개발한 수박게임 velog

https://velog.io/@swan/React-React-Matter-js-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%88%98%EB%B0%95%EA%B2%8C%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-2

 

[React] React + Matter-js 를 이용한 수박게임 만들기 (2)

저번에 만든것에 이어 만들어 보겠습니다. 1. 과일만들기 > 과일을 만들기 위해서 과일이 만들어진 파일이 있어야 합니다. public 폴더에 00 부터 10 까지 이름을 가진 과일들을 저장해 두었습니다.

velog.io

 

TS 수박게임 github 관련 레포

https://github.com/search?q=typescript+Suika&type=repositories

 

 

DB 세팅

users 테이블 : 유저 정보 + 게임 점수 + 보유 코인

user_pokemons 테이블 : 어떤 유저가 어떤 포켓몬을 가지고 있는지 확인 하는 테이블

purchase_history 테이블 : 어떤 유저가 어떤 포켓몬을 구입하였는지 기록하는 테이블

+ pokemon 테이블 : 포켓몬 리스트를 관리하는 테이블 고려 중

 

위 구조를 통하여 유저마다 보유한 포켓몬 확인 및 관리 / 상점에서 포켓몬 중복 구매 방지가 될 것으로 예상됨

 

 

 

메인페이지 

 

      {pokemonData.slice(0, 5).map((pokemon, idx) => (
        <div
          key={idx}
          id={`pokemon-${idx}`}
          className="z-1 absolute cursor-pointer transition-transform duration-1000"
          style={{ transform: `translate(${pokemon.x}px, ${pokemon.y}px)` }}
          onClick={() => handlePokemonClick(idx)}
        >
          <Image
            alt="포켓몬 이미지"
            width={100}
            height={100}
          />
        </div>
      ))}

      {selectedPokemon && (
        <div
          id="selected-pokemon"
          className="z-1 absolute transition-transform duration-1000"
          style={{ transform: `translate(${selectedPokemonPos.x}px, ${selectedPokemonPos.y}px)` }}
        >
          <Image
            alt="선택된 포켓몬 이미지"
            width={200}
            height={200}
          />
        </div>
      )}
    </div>

선택된 포켓몬과 나열된 포켓몬 의 id값 참조 위치가 다르다보니 교체가 원활하게 되지 않는 문제가 있음

 

기존코드

  const handlePokemonClick = (index: number) => {
    if (!selectedPokemon) return;

    const newPokemonData = [...pokemonData];
    const clickedPokemon = newPokemonData[index];

    const tempSprite = clickedPokemon.sprites.front_default;
    newPokemonData[index].sprites.front_default = selectedPokemon.sprites.front_default;
    setSelectedPokemon({ ...selectedPokemon, sprites: { ...selectedPokemon.sprites, front_default: tempSprite } });

    setPokemonData(newPokemonData);
  };

 

변경코드

  const handlePokemonClick = (index: number) => {
    if (!selectedPokemon) return;

    const newPokemonData = [...pokemonData];
    const clickedPokemon = newPokemonData[index];

    const tempId = clickedPokemon.id;
    newPokemonData[index].id = selectedPokemon.id;
    setSelectedPokemon({ ...selectedPokemon, id: tempId });

    setPokemonData(newPokemonData);
  };

Image태그가 아닌 함수 자체에서 id값을 참조하도록 변경 하여 클릭한 포켓몬을 메인 포켓몬으로 상호작용 가능하도록 해결