Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 04.09.2014, 00:19   #1
STekLyAToR
AnyKey`щик
 
Аватар для STekLyAToR
 
Регистрация: 03.09.2014
Сообщений: 17
Написано одно полезное сообщение
Печаль Minecraft на Xors3D C++

Здравствуйте, делал майн на хорсе, компилится, но не запускается.
Вот сбствнн сам код:
// include Xors3d Engine header
#include <xors3d.h>
#include <iostream>

int ent; //Unmatched
int kol_blocks; // Количество блоков
int sel_block; // Пикнутый блок
int blck_tp; // Тип
int dist; // Дистанция
int pick; // Луч выделения
int ACube = xCreatePivot(); // x3

void CreateBlockOnPick(float x, float y, float z, int blck_tp);

float CurveValue(float newvalue, float oldvalue, float increments)
{
	if (increments >  1.0f) oldvalue = oldvalue - (oldvalue - newvalue) / increments;
	if (increments <= 1.0f) oldvalue = newvalue;
	return oldvalue;
}

// program entry point
int APIENTRY WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR commandLine, int commandShow)
{
	// шрифт
	int fnt12 = xLoadFont("Arial", 12);
	xSetFont(fnt12);

	// setup maximum supported AntiAlias Type
	xSetAntiAliasType(xGetMaxAntiAlias());

	// set application window caption
	xAppTitle("Minecraft | by Vovan Kot");

	// initialize graphics mode
	xGraphics3D(800, 600, 32, false, true);
	xSetBuffer(xBackBuffer());

	// hide mouse pointer
	xHidePointer();

	// enable antialiasing
	xAntiAlias(true);

	// create camera
	int camera_piv = xCreatePivot();
	int camera = xCreateCamera();
	xPositionEntity(camera, 0, 5, -15);
	xCameraClsColor(camera, 0, 165, 250);
	xCameraRange(camera, 0.5, 50);

	// light
	int light = xCreateLight();
	xRotateEntity(light, 30, 0, 0);

	// position camera
	xPositionEntity(camera, 0, 2, -10);

	// for mouse look
	xMoveMouse(xGraphicsWidth() / 2, xGraphicsHeight() / 2);
	float mousespeed = 0.5;
	float camerasmoothness = 4.5;
	float mxs = 0.0f;
	float mys = 0.0f;
	float camxa = 0.0f;
	float camya = 0.0f;

	//a-cubes
	//Верх
	int ACube_top = xCreateCube(ACube);
	xPositionEntity(ACube_top, 0, 0.5, 0);
	xScaleEntity(ACube_top, 0.48, 0.05, 0.48);
	xEntityPickMode(ACube_top, 2);
	xNameEntity(ACube_top, "top");

	//Низ
	int ACube_bottom = xCreateCube(ACube);
	xPositionEntity(ACube_bottom, 0, -0.5, 0);
	xScaleEntity(ACube_bottom, 0.48, 0.05, 0.48);
	xEntityPickMode(ACube_bottom, 2);
	xNameEntity(ACube_bottom, "bottom");

	//Перед
	int ACube_front = xCreateCube(ACube);
	xPositionEntity(ACube_front, 0, 0, 0.5);
	xScaleEntity(ACube_front, 0.48, 0.48, 0.05);
	xEntityPickMode(ACube_front, 2);
	xNameEntity(ACube_front, "front");

	//Зад
	int ACube_back = xCreateCube(ACube);
	xPositionEntity(ACube_back, 0, 0, -0.5);
	xScaleEntity(ACube_back, 0.48, 0.48, 0.05);
	xEntityPickMode(ACube_back, 2);
	xNameEntity(ACube_back, "back");

	//Левый бок
	int ACube_left = xCreateCube(ACube);
	xPositionEntity(ACube_left, -0.5, 0, 0);
	xScaleEntity(ACube_left, 0.05, 0.48, 0.48);
	xEntityPickMode(ACube_left, 2);
	xNameEntity(ACube_left, "left");

	//Правый бок
	int ACube_right = xCreateCube(ACube);
	xPositionEntity(ACube_right, 0.5, 0, 0);
	xScaleEntity(ACube_right, 0.05, 0.48, 0.48);
	xEntityPickMode(ACube_right, 2);
	xNameEntity(ACube_right, "right");

	xHideEntity(ACube);

	//"Выделятор"
	int pick_ent_0; //Предыдущий объект

	// main program loop
	while (!xKeyDown(KEY_ESCAPE))
	{
		// camera control
		if (xKeyDown(KEY_W)) xMoveEntity(camera, 0, 0, 1);
		if (xKeyDown(KEY_S)) xMoveEntity(camera, 0, 0, -1);
		if (xKeyDown(KEY_A)) xMoveEntity(camera, -1, 0, 0);
		if (xKeyDown(KEY_D)) xMoveEntity(camera, 1, 0, 0);

		mxs = CurveValue(xMouseXSpeed() * mousespeed, mxs, camerasmoothness);
		mys = CurveValue(xMouseYSpeed() * mousespeed, mys, camerasmoothness);
		camxa = fmodf(camxa - mxs, 360.0f);
		camya = camya + mys;
		if (camya < -89.0f) camya = -89.0f;
		if (camya >  89.0f) camya = 89.0f;
		xRotateEntity(camera, camya, camxa, 0.0);
		xMoveMouse(xGraphicsWidth() / 2, xGraphicsHeight() / 2);

		if (pick_ent_0 != 0)
		{
			xEntityColor(pick_ent_0, 255, 255, 255);
		}

		pick = xCameraPick(camera, xMouseX(), xMouseY());

		if (pick != 0) dist = xEntityDistance(camera, pick);

		if (pick != 0 && pick != ACube_top && pick != ACube_bottom && pick != ACube_front && pick != ACube_back && pick != ACube_left && pick != ACube_right)
		{
			sel_block = pick;
			pick_ent_0 = sel_block;
			xPositionEntity(ACube, xEntityX(pick, true), xEntityY(pick, true), xEntityZ(pick, true));
			xShowEntity(ACube);
		}

		if (dist <= 5 && sel_block != 0) xEntityColor(sel_block, 255, 255, 0);
		if (dist <= 5)
		{
			if (xMouseHit(1) && sel_block != 0 && pick != 0) { /*DeleteBlock(sel_block);*/ xHideEntity(ACube); }
			if (xMouseHit(2) && pick != 0) CreateBlockOnPick(xPickedX(), xPickedY(), xPickedZ(), 0);
		}

		// update animations
		xUpdateWorld();
		xRenderWorld();

		// draw texts
		char buffer[128];
		sprintf(buffer, "FPS: %i", xGetFPS());
		xText(10, 10, buffer);
		xText(xGraphicsWidth() / 2, xGraphicsHeight() / 2, "+");

		// switch back buffer
		xFlip();
	}
	return 0;
}

void CreateBlock(float x, float y, float z, int blck_tp)
{
	switch(blck_tp)
	{
	case 0:
	    {
				int ent = xCreateCube();
				xEntityTexture(ent, xLoadTexture("media/textures/bricks.jpg"));
				kol_blocks += 1;
				xPositionEntity(ent, x, y, z);
				xScaleEntity(ent, 0.5, 0.5, 0.5);
				xEntityPickMode(ent, 2); 
	    }
	}
}

void CreateBlockOnPick(float x, float y, float z, int blck_tp)
{
	int piv = xCreatePivot();
	if (xEntityName(pick) == "top") xPositionEntity(piv, xEntityX(ACube), xEntityY(ACube) + 1, xEntityZ(ACube));
	else if (xEntityName(pick) == "bottom") xPositionEntity(piv, xEntityX(ACube), xEntityY(ACube) - 1, xEntityZ(ACube));
	else if (xEntityName(pick) == "front") xPositionEntity(piv, xEntityX(ACube), xEntityY(ACube), xEntityZ(ACube) + 1);
	else if (xEntityName(pick) == "back") xPositionEntity(piv, xEntityX(ACube), xEntityY(ACube), xEntityZ(ACube) - 1);
	else if (xEntityName(pick) == "left") xPositionEntity(piv, xEntityX(ACube) - 1, xEntityY(ACube), xEntityZ(ACube));
	else if (xEntityName(pick) == "right") xPositionEntity(piv, xEntityX(ACube) + 1, xEntityY(ACube), xEntityZ(ACube));

	/*
	switch (xEntityName(pick))
	{
		case 'top': xPositionEntity(piv, xEntityX(ACube), xEntityY(ACube) + 1, xEntityZ(ACube));
		case 'bot': xPositionEntity(piv, xEntityX(ACube), xEntityY(ACube) - 1, xEntityZ(ACube));
		case 'fron': xPositionEntity(piv, xEntityX(ACube), xEntityY(ACube), xEntityZ(ACube) + 1);
		case 'back': xPositionEntity(piv, xEntityX(ACube), xEntityY(ACube), xEntityZ(ACube) - 1);
		case 'left': xPositionEntity(piv, xEntityX(ACube) - 1, xEntityY(ACube), xEntityZ(ACube));
		case 'righ': xPositionEntity(piv, xEntityX(ACube) + 1, xEntityY(ACube), xEntityZ(ACube));
	}
	*/
	CreateBlock(xEntityX(piv), xEntityY(piv), xEntityZ(piv), blck_tp);
	xFreeEntity(piv);
}
__________________
???
(Offline)
 
Ответить с цитированием
Старый 04.09.2014, 07:18   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,921
Написано 2,169 полезных сообщений
(для 5,913 пользователей)
Ответ: Minecraft на Xors3D C++

но не запускается.
а что делает?
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 04.09.2014, 07:47   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 03.09.2005
Сообщений: 14,014
Написано 6,796 полезных сообщений
(для 20,923 пользователей)
Ответ: Minecraft на Xors3D C++

у меня тут ругается:
cout >> "Penguins rocks!" >> endl;
error: no match for 'operator>>' in 'std::cout >> "Penguins rocks!"'
note: candidates are:
(далее список функций-кандидатов)
птрсн.жпг
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Кирпи4 (06.09.2014), HolyDel (04.09.2014), Mr_F_ (04.09.2014), Okay (29.09.2014), Samodelkin (05.09.2014)
Старый 05.09.2014, 18:13   #4
KCEPOKC
Принтер
 
Аватар для KCEPOKC
 
Регистрация: 21.04.2013
Адрес: Russhka, Default City
Сообщений: 558
Написано 338 полезных сообщений
(для 1,233 пользователей)
Ответ: Minecraft на Xors3D C++

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.
__________________
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо KCEPOKC за это полезное сообщение:
Владислав (13.09.2014), pepel (13.09.2014), Reizel (21.09.2014), SBJoker (05.09.2014)
Старый 06.09.2014, 10:02   #5
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 605
Написано 338 полезных сообщений
(для 1,337 пользователей)
Ответ: Minecraft на Xors3D C++

Можешь взять вот это все, распечатать, смять и выбросить - ну нету в майне цельных кубов, там все строится оче хитро и все невидимые грани отсекаются.

Когда то я тоже начинал делать свой майнкрафт, но потом произошло вот что

Бойся.
__________________


(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
KCEPOKC (09.09.2014)
Старый 07.09.2014, 04:31   #6
STekLyAToR
AnyKey`щик
 
Аватар для STekLyAToR
 
Регистрация: 03.09.2014
Сообщений: 17
Написано одно полезное сообщение
Лампочка Ответ: Minecraft на Xors3D C++

Данный код для Blitz3d, и всё работает!

;Подключаем Xors3D
Include "Xors3D.bb"

;Подключаем наш инклуд с функциями
Include "includes/ENGINE.bb"

Type Blocks
   Field ent ;Объект
   Field typ$ ;Тип блока
End Type

Global kol_blocks ;Количество блоков
Global sel_block ;Выделенный блок

;xGraphics3D ширина, высота, глубина цвета, False-Оконный режим True-Полный экран, False-Максимум FPS если True-60 FPS(Кадров)
xGraphics3D 1024,768,32,False,True
xSetBuffer xBackBuffer()

xAppTitle "Мой Minecraft - DirectX 9" ;Загололовок

xAntiAlias True ;Включить Сглаживание

;Загружаем шрифт Arial с размером 12
Global fnt12=xLoadFont("Arial",12)
xSetFont fnt12

Global camera_piv=xCreatePivot()
Global camera=xCreateCamera()
xPositionEntity camera,0,5,-15
xCameraClsColor camera,0,165,250
;xCameraRange camera,.05,50
Global light=xCreateLight()
xRotateEntity light,30,0,0

;===========

Global ACube=xCreatePivot()
;Верх
Global ACube_top=xCreateCube(ACube)
xPositionEntity ACube_top,0,.5,0
xScaleEntity ACube_top,.48,.05,.48
xEntityPickMode ACube_top,2
xNameEntity ACube_top,"top"
;xEntityAlpha ACube_top,0
;Низ
Global ACube_bottom=xCreateCube(ACube)
xPositionEntity ACube_bottom,0,-.5,0
xScaleEntity ACube_bottom,.48,.05,.48
xEntityPickMode ACube_bottom,2
xNameEntity ACube_bottom,"bottom"
;xEntityAlpha ACube_bottom,0
;Перед
Global ACube_front=xCreateCube(ACube)
xPositionEntity ACube_front,0,0,.5
xScaleEntity ACube_front,.48,.48,.05
xEntityPickMode ACube_front,2
xNameEntity ACube_front,"front"
;xEntityAlpha ACube_front,0
;Зад
Global ACube_back=xCreateCube(ACube)
xPositionEntity ACube_back,0,0,-.5
xScaleEntity ACube_back,.48,.48,.05
xEntityPickMode ACube_back,2
xNameEntity ACube_back,"back"
;xEntityAlpha ACube_back,0
;Левый бок
Global ACube_left=xCreateCube(ACube)
xPositionEntity ACube_left,-.5,0,0
xScaleEntity ACube_left,.05,.48,.48
xEntityPickMode ACube_left,2
xNameEntity ACube_left,"left"
;xEntityAlpha ACube_left,0
;Правый бок
Global ACube_right=xCreateCube(ACube)
xPositionEntity ACube_right,.5,0,0
xScaleEntity ACube_right,.05,.48,.48
xEntityPickMode ACube_right,2
xNameEntity ACube_right,"right"
;xEntityAlpha ACube_right,0

;Скрываем вспомогательный объект ACube
xHideEntity ACube

;===========

Global tex_ground=xLoadTexture("Textures\ground_down.jpg")

Global pick ;Луч исходящий из камеры(короче щупальце)

Global pick_ent_0 ;Предыдущий объект

;For x=-10 To 10
;For z=-10 To 10
CreateBlock(x,0,z,"ground")
;Next
;Next

; ++++++++++++++++++++++
; Начало игрового цикла
; ++++++++++++++++++++++

While Not xKeyDown(1)
   
   ;Движение игрока вперёд, назад, влево, вправо
   If xKeyDown(200) Or xKeyDown(17) Then xMoveEntity camera_piv,0,0,.1
   If xKeyDown(208) Or xKeyDown(31) Then xMoveEntity camera_piv,0,0,-.1
   If xKeyDown(203) Or xKeyDown(30) Then xMoveEntity camera_piv,-.1,0,0
   If xKeyDown(205) Or xKeyDown(32) Then xMoveEntity camera_piv,.1,0,0
   
   ;Движение игрока вверх, вниз
   If xKeyDown(57) Then xMoveEntity camera_piv,0,.1,0
   If xKeyDown(29) Then xMoveEntity camera_piv,0,-.1,0
   
   If xKeyHit(64) Then LoadGame() ;Загружаем сохранение при нажатии клавиши F6
   If xKeyHit(63) Then SaveGame() ;Созраняем игру при нажатии клавиши F5
   
   xPositionEntity camera,xEntityX(camera_piv),xEntityY(camera_piv)+2.5,xEntityZ(camera_piv)
   
   ;Мышка
   ;HidePointer
   MXS#=xMouseXSpeed()*0.1:MYS#=xMouseYSpeed()*0.1
   
   xTurnEntity camera,MYS#,0,0
   xTurnEntity camera_piv,0,-MXS#,0
   
   If xEntityPitch(camera)>90 xRotateEntity camera,90,xEntityYaw(camera_piv),0
   If xEntityPitch(camera)<-90 xRotateEntity camera,-90,xEntityYaw(camera_piv),0
   
   xRotateEntity camera,xEntityPitch(camera),xEntityYaw(camera_piv),0
   xMoveMouse xGraphicsWidth()/2,xGraphicsHeight()/2
   
   If pick_ent_0<>0 Then xEntityColor pick_ent_0,255,255,255 ;Окрашиваем предыдущий объект в белый цвет
   
   pick=xCameraPick(camera,xMouseX(),xMouseY())
   If pick<>0 Then dist=xEntityDistance(camera,pick)
   
   If pick<>0 And pick<>ACube_top And pick<>ACube_bottom And pick<>ACube_front And pick<>ACube_back And pick<>ACube_left And pick<>ACube_right Then
      sel_block=pick
      pick_ent_0=sel_block
   End If
   
   If pick<>0 And pick<>ACube_top And pick<>ACube_bottom And pick<>ACube_front And pick<>ACube_back And pick<>ACube_left And pick<>ACube_right Then xPositionEntity ACube,Int(xEntityX(pick)),Int(xEntityY(pick)),Int(xEntityZ(pick)):xShowEntity ACube
   
   ;Окрашиваем только тот объект который ближе или равен 5 шагам к камере
   If dist<=5 And sel_block<>0 Then
      xEntityColor sel_block,255,255,0 ;Окрашиваем текущий объект в жёлтый цвет
   End If
   
   ;========================
   
   If dist<=5 Then
      If xMouseHit(1) And sel_block<>0 And pick<>0 Then DeleteBlock(sel_block):sel_block=0:xHideEntity ACube
      If xMouseHit(2) And pick<>0 Then CreateBlockOnPick(xPickedX#(),xPickedY#(),xPickedZ#(),"ground")
   End If
   
   ;========================
   
   xUpdateWorld
   xRenderWorld
   
   xText 5,5,"FPS: "+xGetFPS()
   xText 5,20,"Polygons: "+xTrisRendered()/2
   
   xText xGraphicsWidth()/2,50,"KOL-VO BLOCKS="+kol_blocks
   
   ;xText xMouseX(),xMouseY()-55,"ID: "+pick,True,True
  ; If pick<>0 Then 
      ;xText xMouseX(),xMouseY()-35,"TYPE: "+xEntityName$(sel_block),True,True
      ;xText xMouseX(),xMouseY()-15,"DISTANCE: "+dist,True,True
 ;  End If
   
   xFlip
Wend
; ++++++++++++++++++++++

End

;Функция создания нового блока
Function CreateBlock(x#,y#,z#,typ$)
   b.Blocks = New Blocks
   
   Select typ$
   Case "ground"  
      b\ent=xCreateCube()
      xEntityTexture b\ent,tex_ground
   End Select
   
   kol_blocks=kol_blocks+1
   b\typ$=typ$
   
   xPositionEntity b\ent,x#,y#,z#
   xScaleEntity b\ent,.5,.5,.5
   xEntityPickMode b\ent,2 ;Делаем объект видимым лучу выходящим из камеры
   xNameEntity b\ent,typ$ ;Присваеваем тип объекта в его имя
End Function

;Функция удаления блока
Function DeleteBlock(ent)
For b.Blocks = Each Blocks
   If b\ent=ent Then
      xFreeEntity b\ent
      Delete b
      kol_blocks=kol_blocks-1
      
      Goto end_delete_block
   End If
Next
.end_delete_block
End Function

;Функция удаления всех блоков
Function DeleteAllBlocks()
kol_blocks=0
For b.Blocks = Each Blocks
   xFreeEntity b\ent
   Delete b
Next

sel_block=0
pick=0
pick_ent_0=0
End Function

Function CreateBlockOnPick(x#,y#,z#,typ$)
   piv=xCreatePivot()
   
   Select xEntityName(pick)
      Case "top": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube))+1,Int(xEntityZ(ACube))
      Case "bottom": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube))-1,Int(xEntityZ(ACube))
      Case "front": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube)),Int(xEntityZ(ACube))+1
      Case "back": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube)),Int(xEntityZ(ACube))-1
      Case "left": xPositionEntity piv,Int(xEntityX(ACube))-1,Int(xEntityY(ACube)),Int(xEntityZ(ACube))
      Case "right": xPositionEntity piv,Int(xEntityX(ACube))+1,Int(xEntityY(ACube)),Int(xEntityZ(ACube))
   End Select
   
   CreateBlock(xEntityX(piv),xEntityY(piv),xEntityZ(piv),typ$)
   xFreeEntity piv
End Function
А мне нужно, этот код перевести на C++.
Думаю, ты понял.
__________________
???
(Offline)
 
Ответить с цитированием
Старый 07.09.2014, 11:23   #7
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 895
Написано 477 полезных сообщений
(для 1,464 пользователей)
Ответ: Minecraft на Xors3D C++

Тебе не нужно переводить это на C++, тебе нужно научиться кодить.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо Nerd за это полезное сообщение:
KCEPOKC (07.09.2014), L-ee-X (07.09.2014), Randomize (08.09.2014), STekLyAToR (24.02.2018)
Старый 13.09.2014, 07:02   #8
Владислав
ПроЭктировщик
 
Аватар для Владислав
 
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений
(для 219 пользователей)
Ответ: Minecraft на Xors3D C++

CreateCube()
это в отношении "minecraft-like-game" вообще надо забыть

   Case "ground"  
      b\ent=xCreateCube()
      xEntityTexture b\ent,tex_ground
   End Select
И что, так прописывать характеристики каждого блока в коде? тебе нужно сделать базу данных, где будет указан тип блока (прозрачный/непрозрачный) его имя, текстура, звук шагов, звук удара, его дроп, количество дропа, его огнеупорность и крепость, и еще кучу параметров, но для начала хотя бы просто имя и текстуру, и хранить это все в базе, а в коде уже только обращаться к ней.

Goto end_delete_block
Уже лучше exit или return 0

xNameEntity b\ent,typ$ ;Присваеваем тип объекта в его имя
лучше хранить тип объекта в численном представлении, чем строковом, и не через имя ентити. Разумней использовать массив, уже имея этот массив тебе нужно будет строить сетку по нему, т.е. только видимые грани, между двумя соседними блоками никаких полигонов. Этот массив уже проще сохранять в файл и заполнять его от туда же.

   Select xEntityName(pick)
      Case "top": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube))+1,Int(xEntityZ(ACube))
      Case "bottom": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube))-1,Int(xEntityZ(ACube))
      Case "front": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube)),Int(xEntityZ(ACube))+1
      Case "back": xPositionEntity piv,Int(xEntityX(ACube)),Int(xEntityY(ACube)),Int(xEntityZ(ACube))-1
      Case "left": xPositionEntity piv,Int(xEntityX(ACube))-1,Int(xEntityY(ACube)),Int(xEntityZ(ACube))
      Case "right": xPositionEntity piv,Int(xEntityX(ACube))+1,Int(xEntityY(ACube)),Int(xEntityZ(ACube))
   End Select
Так тоже лучше не делать, все что нужно - это определить координаты "пика" (целочисленные) и воткнуть туда блок, а далее уе перестроить всю сетку. Перестраивать сетку всего мира "дорого" поэтому имеет смысл разделить его на чанки, что и сделано в minecraft. Каждый чанк это 16х16х256, если не ошибаюсь, и все что нужно при добавлении блока - перестроить 1 чанк, это несколько "дешевле". Так же удобно сохранять мир - 1 чанк - 1 файл, их же удобно и подгружать при надобности (игрок например подошел) и сохранять в файл (выгружать чанк, когда игрок ушел далеко от него).

Вообще в данном случае код на ++ ни чем не лучше кода на blitz. доступ к кабине пилота не делает тебя пилотом, как-то так.

Вот мой пример, тоже было интересна данная тема (это blitz3d)
если не грузиться то тыкнуть тут


А на скрине это уже хорс, более 4млн блоков, 232 чанка и все стабильно
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 655
Размер:	114.1 Кб
ID:	20875  
__________________


Последний раз редактировалось impersonalis, 13.09.2014 в 14:54. Причина: тег
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо Владислав за это полезное сообщение:
impersonalis (13.09.2014), Mr_F_ (20.09.2014), SBJoker (13.09.2014), STekLyAToR (24.02.2018)
Старый 20.09.2014, 12:43   #9
STekLyAToR
AnyKey`щик
 
Аватар для STekLyAToR
 
Регистрация: 03.09.2014
Сообщений: 17
Написано одно полезное сообщение
Ответ: Minecraft на Xors3D C++

Мне не нужно "прям штоб как майн был и придметы быле" а просто, чтобы можно было ставить блоки друг к другу!
__________________
???
(Offline)
 
Ответить с цитированием
Старый 20.09.2014, 22:03   #10
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,888
Написано 1,183 полезных сообщений
(для 3,292 пользователей)
Ответ: Minecraft на Xors3D C++

Сообщение от STekLyAToR Посмотреть сообщение
Мне не нужно "прям штоб как майн был и придметы быле" а просто, чтобы можно было ставить блоки друг к другу!
Дело в том, что через какое то время делая блоки через CreateCube() у тебя начнет лагать игра, а потом и вовсе зависнет. А все потому что в игре будет много объектов. А делать как "прям штоб как майн был" это значит объединять все эти тысячи объектов в один удаляя те стороны кубиков, которые мы не видим.
(Offline)
 
Ответить с цитированием
Старый 21.09.2014, 02:56   #11
STekLyAToR
AnyKey`щик
 
Аватар для STekLyAToR
 
Регистрация: 03.09.2014
Сообщений: 17
Написано одно полезное сообщение
Ответ: Minecraft на Xors3D C++

Это неважно, мне не нужно много блоков.
__________________
???
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 08:26.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com