하나의 bool이 참인 2D 배열의 요소를 가져와야합니다. 이 부울이있는 것은 유일한 것입니다.특정 값을 가진 배열의 요소를 얻는 방법
public void getCurrentTile()
{
for (int x = 0; x < 75; x++)
{
for (int y = 0; y < 75; y++)
{
if (((Tile)grid[y, x]).lit)
{
current = (Tile)grid[y, x];
}
}
}
}
이것은 현재 코드입니다. 올바르게 작동하지 않는 것 같습니다. 하나의 타일에 불이 들어올 때만 현재 값을 반환합니다. 다른 타일에 불이 들어 오면 타일을 반환하지 않습니다. 타일의
코드 :
이 그것을해야using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
namespace SimMedieval
{
public class Tile
{
public int size;
public String path;
public Texture2D texture;
public bool lit = false;
public bool lightable;
MouseState mouseState;
public System.Drawing.Color color;
public int posX;
public int posY;
public Tile(int s, String texturepath, bool light)
{
size = s;
path = texturepath;
lightable = light;
}
public void load(Game game, Game1 game1, System.Drawing.Color colour)
{
color = colour;
texture = game.Content.Load<Texture2D>(path);
game1.tiles.Add(this);
}
public void render(SpriteBatch sprites,int x, int y, Camera cam, Tile[,] grid)
{
mouseState = Mouse.GetState();
float camPosX = (x * size) + cam.posX;
float camPosY = (y * size) + cam.posY;
if (-20 < camPosX && camPosX < 960 && -20 < camPosY && camPosY < 640)
{
if (new Microsoft.Xna.Framework.Rectangle(x, y, 1, 1).Contains((mouseState.X/size) - ((int)Math.Round(cam.posX)/size), (mouseState.Y/size) - ((int)Math.Round(cam.posY)/size)))
{
lit = true;
grid[y, x] = this;
sprites.Draw(texture, new Vector2((x * size) + cam.posX, (y * size) + cam.posY), Microsoft.Xna.Framework.Color.Coral);
}
else
{
lit = false;
grid[y, x] = this;
sprites.Draw(texture, new Vector2((x * size) + cam.posX, (y * size) + cam.posY), Microsoft.Xna.Framework.Color.White);
}
}
}
public void spawn(int x, int y, Tile[,] grid)
{
grid[y, x] = this;
posX = x;
posY = y;
}
}
}
나는 이해하지 못한다. 한편으로는'이 부울을 가진 유일한 존재입니다 '라고 말하면서'다른 타일이 켜지면'이라고 말합니다. 그래서 하나 이상의 타일이있을 수 있습니까? –
그래, 새로운 전류를 선택할 때 타일을 꺼 놓는 것을 잊어 버릴지도 모른다. 아니면 조명이없는 타일이있을 것입니다. 더 좋은 접근법에 대한 두 대답을 모두 확인해보십시오. (합산하기 위해 함수 내에서 할당하는 대신 발견 된 타일을 반환하고, 호출자가 아닌 결과를 처리해야합니다.) – SimpleVar
설명해 드리겠습니다. 항상 하나의 타일이 켜져 있습니다. 또 다른 한 번. 그러나 제 코드는 # 20 타일이 켜져있을 때 타일을 반환합니다. 그러나 타일 # 13이 켜져 있고 # 20은 아무것도 반환되지 않습니다. – Hobbit9797