int main() { sgb::Chip8 chip8; chip8.loadGame("PONG2"); back.create(64, 32, sf::Color::Black); backshape.setPosition(0, 0); backtext.loadFromImage(back); backshape.setTexture(&backtext); while(window.isOpen()){ sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } // emulate one cycle chip8.emulateCycle(); // if drawflag is set, update screen; if (chip8.drawFlag) updateGraphics(chip8); //query keys chip8.setKeys(); sf::sleep(sf::seconds(1.0f/500.0f)); } return 0; }
//initialize muparser and graphics void init() { p.DefineVar("theta", &t); p.DefineConst("pi", pi); graph.create(size,size,sf::Color::Transparent); graphTx.loadFromImage(graph); graphSpr.setTexture(graphTx); //center on screen graphSpr.setOrigin(size/2,size/2); graphSpr.setPosition(windowsize.x/2, windowsize.y/2); }
bool CreateTextureAndBitmask(sf::Texture &LoadInto, const std::string& Filename) { sf::Image img; if (!img.loadFromFile(Filename)) return false; if (!LoadInto.loadFromImage(img)) return false; Bitmasks.CreateMask(&LoadInto, img); return true; }
sf::Sprite GraphicEngine::loadSprite(sf::Texture &texture, sf::Sprite &sprite, std::string filename, sf::Vector2i position) { string name = "data/images/" + filename + ""; sf::Image img; img.loadFromFile(name); img.createMaskFromColor(sf::Color::White); texture.loadFromImage(img); sprite.setTexture(texture); sprite.setPosition(position.x, position.y); return sprite; }
bool Level::LoadFromFile(std::string filename) { TiXmlDocument levelFile(filename.c_str()); // Загружаем XML-карту if(!levelFile.LoadFile()) { std::cout << "Loading level \"" << filename << "\" failed." << std::endl; return false; } // Работаем с контейнером map TiXmlElement *map; map = levelFile.FirstChildElement("map"); // Пример карты: <map version="1.0" orientation="orthogonal" // width="10" height="10" tilewidth="34" tileheight="34"> width = atoi(map->Attribute("width")); height = atoi(map->Attribute("height")); tileWidth = atoi(map->Attribute("tilewidth")); tileHeight = atoi(map->Attribute("tileheight")); // Берем описание тайлсета и идентификатор первого тайла TiXmlElement *tilesetElement; tilesetElement = map->FirstChildElement("tileset"); firstTileID = atoi(tilesetElement->Attribute("firstgid")); // source - путь до картинки в контейнере image TiXmlElement *image; image = tilesetElement->FirstChildElement("image"); std::string imagepath = image->Attribute("source"); // Пытаемся загрузить тайлсет sf::Image img; if(!img.loadFromFile(imagepath)) { std::cout << "Failed to load tile sheet." << std::endl; return false; } img.createMaskFromColor(sf::Color(255, 255, 255)); tilesetImage.loadFromImage(img); tilesetImage.setSmooth(false); // Получаем количество столбцов и строк тайлсета int columns = tilesetImage.getSize().x / tileWidth; int rows = tilesetImage.getSize().y / tileHeight; // Вектор из прямоугольников изображений (TextureRect) std::vector<sf::Rect<int>> subRects; for(int y = 0; y < rows; y++) for(int x = 0; x < columns; x++) { sf::Rect<int> rect; rect.top = y * tileHeight; rect.height = tileHeight; rect.left = x * tileWidth; rect.width = tileWidth; subRects.push_back(rect); } // Работа со слоями TiXmlElement *layerElement; layerElement = map->FirstChildElement("layer"); while(layerElement) { Layer layer; // Если присутствует opacity, то задаем прозрачность слоя, иначе он полностью непрозрачен if (layerElement->Attribute("opacity") != NULL) { float opacity = strtod(layerElement->Attribute("opacity"), NULL); layer.opacity = 255 * opacity; } else { layer.opacity = 255; } // Контейнер <data> TiXmlElement *layerDataElement; layerDataElement = layerElement->FirstChildElement("data"); if(layerDataElement == NULL) { std::cout << "Bad map. No layer information found." << std::endl; } // Контейнер <tile> - описание тайлов каждого слоя TiXmlElement *tileElement; tileElement = layerDataElement->FirstChildElement("tile"); if(tileElement == NULL) { std::cout << "Bad map. No tile information found." << std::endl; return false; } int x = 0; int y = 0; while(tileElement) { int tileGID = atoi(tileElement->Attribute("gid")); int subRectToUse = tileGID - firstTileID; // Устанавливаем TextureRect каждого тайла if (subRectToUse >= 0) { sf::Sprite sprite; sprite.setTexture(tilesetImage); sprite.setTextureRect(subRects[subRectToUse]); sprite.setPosition(x * tileWidth, y * tileHeight); sprite.setColor(sf::Color(255, 255, 255, layer.opacity)); layer.tiles.push_back(sprite); } tileElement = tileElement->NextSiblingElement("tile"); x++; if (x >= width) { x = 0; y++; if(y >= height) y = 0; } } layers.push_back(layer); layerElement = layerElement->NextSiblingElement("layer"); } // Работа с объектами TiXmlElement *objectGroupElement; // Если есть слои объектов if (map->FirstChildElement("objectgroup") != NULL) { objectGroupElement = map->FirstChildElement("objectgroup"); while (objectGroupElement) { // Контейнер <object> TiXmlElement *objectElement; objectElement = objectGroupElement->FirstChildElement("object"); while(objectElement) { // Получаем все данные - тип, имя, позиция, etc std::string objectType; if (objectElement->Attribute("type") != NULL) { objectType = objectElement->Attribute("type"); } std::string objectName; if (objectElement->Attribute("name") != NULL) { objectName = objectElement->Attribute("name"); } int x = atoi(objectElement->Attribute("x")); int y = atoi(objectElement->Attribute("y")); int width, height; sf::Sprite sprite; sprite.setTexture(tilesetImage); sprite.setTextureRect(sf::Rect<int>(0,0,0,0)); sprite.setPosition(x, y); if (objectElement->Attribute("width") != NULL) { width = atoi(objectElement->Attribute("width")); height = atoi(objectElement->Attribute("height")); } else { width = subRects[atoi(objectElement->Attribute("gid")) - firstTileID].width; height = subRects[atoi(objectElement->Attribute("gid")) - firstTileID].height; sprite.setTextureRect(subRects[atoi(objectElement->Attribute("gid")) - firstTileID]); } // Экземпляр объекта Object object; object.name = objectName; object.type = objectType; object.sprite = sprite; sf::Rect <float> objectRect; objectRect.top = y; objectRect.left = x; objectRect.height = height; objectRect.width = width; object.rect = objectRect; // "Переменные" объекта TiXmlElement *properties; properties = objectElement->FirstChildElement("properties"); if (properties != NULL) { TiXmlElement *prop; prop = properties->FirstChildElement("property"); if (prop != NULL) { while(prop) { std::string propertyName = prop->Attribute("name"); std::string propertyValue = prop->Attribute("value"); object.properties[propertyName] = propertyValue; prop = prop->NextSiblingElement("property"); } } } objects.push_back(object); objectElement = objectElement->NextSiblingElement("object"); } objectGroupElement = objectGroupElement->NextSiblingElement("objectgroup"); } } else { std::cout << "No object layers found..." << std::endl; } return true; }
void FractalVis::drawFrame(sf::Texture& screen) { frame.create(256, 256, &(*colors1DUint8)); //set the Image frame to the known display array frame.setPixel(128, 128, sf::Color::Yellow); //put a dot in the center screen.loadFromImage(frame); //display the image };