Question

Je suis bien dans la création de mon remake 2d de minecraft en java. Je sais que cela peut être bien fait, orange451 sur youtube m'a inspiré pour essayer de faire cela. J'ai tous les blocs sur la carte chargement de fichiers texte, et quand le chargement du jeu, il ajoute tous les blocs des fichiers texte à un ArrayList. J'ai créé un algorithme de calcul de l'indice du bloc curseur est dans le jeu, et a ajouté un MouseListener de sorte que lorsque je clique sur elle remplacerait le bloc avec un bloc d'air (détruire essentiellement le bloc). Pour remplacer le bloc dans la liste de tableaux, je le procédé ensemble ArrayList (indice, obj). En théorie, il devrait fonctionner correctement, et d'une manière fait. Le seul problème est que cela crée aussi un espace noir sur la carte quelques pâtés de maisons. Ceci est extrêmement frustrant, surtout que je suis venu jusqu'à présent. PLUS D'INFO: J'ai besoin d'une méthode qui remplacera l'objet dans le ArrayList, ou une meilleure façon de le faire parce que ma méthode de détection de collision utilise également le ArrayList pour détecter une position de blocs. AIDEZ-MOI, S'IL VOUS PLAÎT! Je ne peux pas les images poste, mais son emplacement du bloc à la texture de l'air, mais la création d'un carré noir (un écart dans le Mabey arraylist?) À proximité. Parce que Theres trop de code pour afficher, voici le code source pour l'ensemble du projet: Blockworld 2D Source

Était-ce utile?

La solution

You're struggling with this because an ArrayList of objects that know their coordinate is an insane way to represent this 2d structure. It's unordered - you could reverse or shuffle your ArrayList and it would paint the same. It has O(N) update, as you have to search the ArrayList for an object of the appropriate coordinate before you can replace it. It can have more than one object with the same coordinate. It can be in a state where visible coordinates do not have corresponding objects at all -- which is what you've encountered, here.

PLEASE HELP ME

OK. Start with a two dimensional array (array, not ArrayList) of byte. Which allows you 256 kinds of block, and which allows your players to dig without constantly allocating memory with your new AirBlock(0, 0) madness. To draw the world, iterate over visible coordinates and map bytes to Bitmap or like.

Also: a 2d Minecraft already exists. It's called Terraria.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top