묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
Gun Script (5/6) 질문입니다
var fireDirection = aimTarget - fireTransform.position Shot(fireTransform.position, fireDirection); 목표 지점에서 총구 지점 뺴면 그 거리와 방향이 나오잖아요? 그런데 Shot함수 내에서 hitPosition = startPoint + direction * fireDistance; 라고 마지막에 해버리던데, 시작 포인트에서 방향을 더하는 것까지는 알겠는데 그 방향에 fireDirection으로서 거리까지 다 포함되어 있는데 거기에 더해서 fireDistance를 곱하는 게 이해가 안 갑니다.. direction이 단위 방향이라면 이해가 가겠는데 말이죠..
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
LayerMask
API 검색해보니까 bit마스크라고 그러던데 만일 어떤 레이어1을 표현하는 2진수가 101010이면 처리되는 오브젝트 검사해서 101010레이어에 속해 있으면 레이어에 포함된 거로 친다고 하면요, ~ 붙여서 010101로 바꿔버리면, 그래서 Physics.Raycast(startPoint, direction, out hit, fireDistance, ~101010(=010101)) 했다고 치면 010101 레이어에 속해 있는 오브젝트들만 반응해야 하는 거 아닌가요?? ~ 연산자가 정확히 어떻게 되는 거죠?? 실제로는 101010이 아닌 레이어들 몽땅에게 적용되던데 비트 뒤집기라고 하면 010101인 레이어만 적용되어야 하는 거 아닐까요?
-
해결됨선형대수학개론
갑분 삼각함수?
1.8 9:54초 이 부분에서 왜 갑자기 Identical Matrix의 vector들이 코사인과 사인으로 변신하는지 이해가 되지 않습니다... 이해하기 위한 선행지식으로 삼각함수가 필요한 내용일까요? 어느정도는 아는데 여기선 잘 모르겠네요 ㅜ
-
해결됨스프링 부트 개념과 활용
구글검색법
강의 중간(3:10)에 modelmapper 링크 드래그 하셔서 바로 구글로 검색하시던데, 편해보이네요.ㅎㅎ 어떻게 하는 건가요?
-
미해결파이썬 입문 및 웹 크롤링을 활용한 다양한 자동화 어플리케이션 제작하기
처음부터 그대로 따라하고있는데 콘솔창 실행이안되네요
def~ print ('hi')까지도 실행해보고 전체도실행해봤는데 피니쉬라고만 되고 동영상처럼 프로그램은 안뜨네요.. 그전강의부터 쭉 동영상 그대로 보면서 똑같이 했는데 뭐가문제일까요?
-
미해결홍정모의 게임 만들기 연습 문제 패키지
탱크예제에 포탄 발사소리
연습문제 중에 탱크예제에 포탄발사 소리를 넣으려고 하는데 해당 강의에서 배운 내용을 바탕으로 bulletSound()라는 함수를 만들고 if (isKeyPressedAndReleased(GLFW_KEY_SPACE)) { for (int i = 0; i < 5; ++i) { if (bullet[i]==nullptr) { bullet[i] = new MyBullet; bulletSound(); bullet[i]->center = tank.center; bullet[i]->center.x += 0.2f; .... 이런식으로 스페이스바 누르면 총알 나가는 구조 안에 bulletSound()를 추가했습니다. 그런데 이렇게하면 bulletSound() 함수 안의 while문(노래끝났으면 break;) 때문에 효과음이 끝나고나서야 총알이 발사가 됩니다. bulletSound()함수를 뒤에 위치시켜도 똑같은 결과가 나오구요. while문을 없애면 소리가 안나오고, if(!playing) break; 조건을 없애서 while(true) { system->update(); } 로 하자니 무한반복으로 계속 돌고 어떤 방법을 이용해야 총알과 소리가 같이 나올 수 있을까요 제가 놓치고 있는게 뭔지 알려주시면 감사하겠습니다.
-
미해결파이썬 데이터시각화 분석 실전 프로젝트
크리애플 사이트에서 리소스를 찾지 못하겠습니다.
어디를 말씀하시는지 모르겠습니다
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence.xml 관련 질문입니다 :)
현재 프로젝트를 gradle로 진행하고 있어서 gradle로 실습을 따라가고 있습니다. persistence.xml 의 내용이 gradle의 application.yml과 유사하다고 느껴지는데 동일한 역할을 수행하는 건가요?? 좋은 강의 감사합니다
-
미해결Adobe Premiere Pro CC 2018, 2019 영상편집의 입문 Part.1
바로 전 시간에 강제로 프레임 레이트 바꿔서 작업하면
아주 안좋다고,,,렌더링 할 때나 오디오 쪽으로도 문제가 발생할 수 있다고 그런 습관 들이지 말라고 하지 않으셨나요....? 갑자기 다음 강의 시작하자마자 마스터 프레임을 정한다면서 바꿔서 작업하시니 뭐가 뭔지 1도 모르겠어요;
-
미해결남박사의 파이썬 기초부터 실전 100% 활용
터미널에서 실행이 되지 않습니다,,,,
새로 파일을 불어와서 해 봐도 그냥 다음 칸으로 넘어가기만 하네요
-
미해결홍정모의 따라하며 배우는 C언어 (부록)
1번 실행하면 에러가 뜨는데 이유를 모르겠습니다..
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #define TSIZE 45 #define LMAX 10 struct movie { char title[TSIZE]; float rating; }; void read_file(struct movie movie_list[], int* ptr_n_items) //값 바꿀수 잇어야 하므로 포인터로 저장 { char filename[TSIZE] = { 0, }; //버퍼역할을 하는 문자의 배열 printf("읽기위한 파일 이름 입력후 엔터 눌르셈"); printf(">>"); if (scanf("%[^\n]%*c", filename) != 1) { printf("Wrong input. Terminating\n"); exit(1); } FILE* file = fopen(filename, "r"); if (file == NULL) { printf("에러 : 파일 열 수 없음"); exit(1); } int num; //파일 몇개인지 읽는 거 if (fscanf(file, "%d%*c", &num) != 1) { printf("ERROR: 잘못된 파일 포맷"); exit(1); } for (int n = 0; n < num; ++n) { if (fscanf(file, "%[^\n]%*c", movie_list[*ptr_n_items].title) != 1 || fscanf(file, "%f%*c", &movie_list[*ptr_n_items].rating) != 1) { printf("ERROR 잘못된 파일 형식"); exit(1); } *ptr_n_items += 1; } assert(*ptr_n_items == num); fclose(file); printf("%d items have been read from the file\n", *ptr_n_items); } void write_file(struct movie movie_list[], int n_items) { char filename[TSIZE] = { 0, }; printf("파일 이름 입력하고 엔터 쳐주세요"); printf(">>"); if (scanf("%[^\n]%*c", filename) != 1) { printf("Wrong input . Terminating\n"); exit(1); } FILE* file = fopen(filename, "w"); if (file == NULL) { printf("ERROR : 파일 못염\n"); exit(1); } fprintf(file, "%d\n", n_items); for (int n = 0; n < n_items; ++n) { fprintf(file, "%s\n", movie_list[n].title); fprintf(file, "%f\n", movie_list[n].rating); } fclose(file); printf("%d items have been saved to the file\n", n_items); } int input_int() //사용자로부터 정수 입력 받는 경우 많기떄문에(자주 사용해서 하나 만듬) { int input; while (1) { printf(">>"); if (scanf("%d%*c", &input) == 1) return input; else { printf("숫자 입력후 엔터 눌러주세요\n"); while (getchar() != '\n') continue; } } } int input_menu() { while (1) { printf("\n 옵션 선택후 엔터 눌러주세요\n"); printf("1.print all items 2. print an item\n"); printf("3.Edit an item 4. add an item\n"); printf("5.insert an item 6.delete an item\n"); printf("7.delete all items 8.save file\n"); printf("9.search by name 10.quit\n"); int input = input_int(); if (input >= 1 && input <= 10) return input; else printf("%d is invalid. please try again\n", input); } } void print_all(struct movie movie_list[], int n_items) { for (int n = 0; n_items; ++n) printf("%d: \"%s\", %.1f\n", n, movie_list[n].title, movie_list[n].rating); } void print_an_item(struct movie movie_list[], int n_items) { printf("Input the index of item to print\n"); int index = input_int(); if (index < n_items) printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); else printf("invalid items\n"); } void edit_an_item(struct movie movie_list[], int n_items) { printf(" 수정하기 위한 아이템의 인덱스를 입력하세요"); int index = input_int(); if (index < n_items) { printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); printf("새 타이틀 입력후 엔터 쳐주세요"); printf(">>"); int f = scanf("%[^\n]%*c", movie_list[index].title); printf("새 평점 입력후 엔터 쳐주세요"); printf(">>"); f = scanf_s("%f%*c", &movie_list[index].rating); printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); } else printf("invlaid items\n"); } void add_an_item(struct movie movie_list[], int* ptr_n_items)//n_items is a pointer { if (*ptr_n_items == LMAX) { printf("NO more space\n"); return; } const int index = *ptr_n_items; printf("타이틀 입력후 엔터\n"); printf(">>"); int f = scanf("%[^\n]%*c", movie_list[index].title); printf("평점 입력후 엔터\n"); printf(">>"); f = scanf("%f%*c", &movie_list[index].rating); printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); *ptr_n_items += 1; } void insert_an_item(struct movie movie_list[], int* ptr_n_items) { if (*ptr_n_items == LMAX) { printf("공간 없음"); return; } printf("아이템 인덱스 입력"); int index = input_int(); //memmove(&movie_list[index+1], &movie_list[index], //sizeof(struct movie) * (*ptr_n_items -index)); /*for llop implemetation*/ for (int i = *ptr_n_items - 1; i >= index; i--) { strcpy(movie_list[i + 1].title, movie_list[i].title); movie_list[i + 1].rating = movie_list[i].rating; } //뒤에서 부터 한칸씩 앞으로 떙기는 거 printf("타이틀을 입력후 엔터 쳐주세요"); printf(">>"); int f = scanf("%[^\n]%*c", movie_list[index].title); printf("새 평점 입력후 엔터 쳐주세요"); printf(">>"); f = scanf("%f%*c", &movie_list[index].rating); printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); *ptr_n_items += 1; } void delete_an_item(struct movie movie_list[], int* ptr_n_items) { printf("아이템 인덱스 입력"); int index = input_int(); //memmove(&movie_list[index+1], &movie_list[index], //sizeof(struct movie) * (*ptr_n_items -index)); /*for llop implemetation*/ for (int i = index; i < *ptr_n_items; i++) { strcpy(movie_list[i].title, movie_list[i + 1].title); movie_list[i].rating = movie_list[i + 1].rating; } *ptr_n_items -= 1; } void search_by_name(struct movie movie_list[], int n_items) { printf("찾으려는 타이틀 입력"); printf(">> "); char title[TSIZE] = { 0, }; if (scanf("%[^\n]%*c", title) != 1) { printf("Wrong input\n"); return; } int index = 0; for (; index < n_items; ++index) { if (strcmp(movie_list[index].title, title) == 0) break; } if (index == n_items) printf("영화를 찾을 수 없읍니다 :%s\n", title); else printf("%d: \"%s\", %.1f\n", index, movie_list[index].title, movie_list[index].rating); } int main() { struct movie movie_list[LMAX]; size_t n_items = 0; read_file(movie_list, &n_items); while (1) { printf("\n"); int s = input_menu(); switch (s) { case 1: print_all(movie_list, n_items); break; case 2: print_an_item(movie_list, n_items); break; case 3: edit_an_item(movie_list, n_items); break; case 4: add_an_item(movie_list, &n_items); break; case 5: insert_an_item(movie_list, &n_items); break; case 6: delete_an_item(movie_list, &n_items); break; case 7: n_items = 0; break; //& 있는애 있고 없는 애 있는데(n_items에서) 아이템 하나 추가 도ㅟ니까 값이 변해야 되므로 주솔르 넘겨준느 거. case 8: write_file(movie_list, n_items); break; case 9: search_by_name(movie_list, n_items); break; case 10: printf("Good bye\n"); exit(0); default: printf("%d is not implemented.\n", s); } } return 0; } 소스는 이렇게 다 따라 쳤는데 1번 실행하면 저렇게 에러가 뜨고 글자가 다 깨진 상태로 나오더라구요.. 이유를 알 수 있을까요?
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
TPS강의 관련
파티클은 어떻게 만드신 건가요???
-
미해결파이썬 레시피 - 웹 활용 입문편 (전자책 포함)
네이버 메일링 질문드립니다.
질문에 앞서 좋은 무료강의를 공유해주셔서 진심으로 감사드립니다. 강의 잘 따라가고 있는데 코드상 문제가 없는데 네이버에서 오류가 납니다. 제 추측으로는 네이버 로그인 인증 2단계(모바일에서 예를 눌러야 하는 기능)와 관련이 있는 것 같은데 파이썬 자동화로 네이버 메일링을 하려면 새로 계정을 만들어서 트라이 하는 것이 유일한 방법일까요?
-
미해결웹 게임을 만들며 배우는 React
this
안녕하세요 궁금한게 있는데요 class에서는 state를 변경할 때 this.state.value 이런식으로 this.state 를 써주었는데 Hooks에서는 this.state를 사용하지 않고 써주는 것도 class와 Hooks의 차이점 인가요?
-
해결됨React로 NodeBird SNS 만들기
댓글 기능에 db SELF JOIN을 걸어서 대댓글을 만들고 싶습니다.
module.exports = (sequelize,DataTypes) => { const Comment = sequelize.define('Comment', { content:{ type: DataTypes.TEXT, allowNull: false, }, isDeleted:{ type:DataTypes.BOOLEAN, allowNull:false, defaultValue:false, }, }, { charset :'utf8mb4', collate : 'utf8mb4_general_ci', }); Comment.associate = (db) => { db.Comment.belongsTo(db.User); db.Comment.belongsTo(db.Post); db.Comment.belongsTo(db.Comment,{as:'ReComment', foreignKey:'ParentId'}); }; return Comment;}; 다음과 같이 모델에 새로 관계 추가해줬구요 router.post('/:postId/comment/:parentId', isLoggedIn, async (req, res, next) => { // POST /api/post/10/comment/2 try { const post = await db.Post.findOne({ where: { id: req.params.postId } }); if (!post) { return res.status(404).send('\"message\": \"포스트가 존재하지 않습니다.\"'); } const comment = await db.Comment.findOne({ where: { id: req.params.parentId } }); if (!comment) { return res.status(404).send('\"message\": \"댓글이 존재하지 않습니다.\"'); } const reComment = await db.Comment.create({ PostId: req.params.postId, UserId: req.user.id, content: req.body.content, ParentId: req.params.parentId, }); await post.addComment(reComment.id); const comments = await db.Comment.findOne({ where: { id: reComment.id, }, include: [{ model: db.User, attributes: ['id', 'nickname'], }], }); return res.json(comments); } catch (e) { console.error(e); return next(e); }}); 다음과 같이 라우터에도 추가해줘서 대댓글이 잘 생성이 되긴 합니다. 그런데 대댓글의 데이터 셋을 뽑아올 때 sequelize로 어떻게 뽑아와야할 지 모르겠더라구요. 일단 제가 작성한 코드는 다음과 같습니다. router.get('/:id/comments', async (req, res, next) => { try { const post = await db.Post.findOne({ where: { id: req.params.id } }); if (!post) { return res.status(404).send('\"message\": \"포스트가 존재하지 않습니다.\"'); } const comments = await db.Comment.findAll({ where: { PostId: req.params.id, isDeleted:0, ParentId : null, }, order: [['createdAt', 'ASC']], include: [{ model: db.User, attributes: ['id', 'nickname'], include:[{ model:db.Image, attributes:['src'] }] }, { model: db.Comment, as:'ReComment', where: { ParentId: Comment.id //해결하고싶은 부분 } }], }); res.json(comments); } catch (e) { console.error(e); next(e); }}); 해결하고싶은 부분이 바로 저부분입니다. WHERE절에 db.Comment 의 id를 가져다가 사용하고싶은데요 어떤 함수를 사용해야하는지 공식문서를 찾아봐도 못찾겠더라구요 혹시 해결방법이 있을까요? 생 쿼리를 사용한다면 SELECT * FROM comments.Co SELF JOIN comments.Re ON Re.parentId = Co.id 이런 느낌이겠네요.
-
미해결파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자
도와주십시오 선생님 ㅠㅠ
리스트 L에서 임의의 자료값 하나를 꺼내려고 했는데 TypeError: 'list' object is not callable 이라고 뜨네요 ㅠㅠ 그리고 맨처음 from은 왜 노랑 밑줄 쳐져있는 건가요?
-
미해결Node.js 교과서 - 기본부터 프로젝트 실습까지
isLoggedIn 에서 req.isAuthenticated() 질문있습니다.
소셜 로그인 부분에서 req.isAuthenticated() 부분이 인증이 되었음에도 false가 반환됩니다. cookie에서 뭔가 인증을 해줘야하는 건가요? 어떻게 해결해야 하나요?
-
미해결리버스쿨 Level1 - 리버싱 분석 초급과정
우분투 파일 다운로드 링크 관련
안녕하세요, 강사님~ 리버스쿨 Level 1 강의를 매우 재미있게 듣고 있는 수강생입니다. :-) 실습을 위해 환경구축을 하려 하는데 알려주신 우분투 파일 다운로드 경로에 접근하니, 링크를 찾을 수 없다고 합니다. 현 시점에서는 해당 파일을 어디에서 구할 수 있을지 확인 부탁드리겠습니다!
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
code lint, assistant가 안나오는 경우는 어떻게 해결 할 수 있을까요?
두가지 패키지는 install했는데, 코드 힌트를 보려면 따로 더 설정을 해 주어야 하나요?
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
PlayerMovement (3/4) 질문입니다.
public void Rotate() { var targetRotation = followCam.transform.eulerAngles.y; transform.eulerAngles = Vector3.up * targetRotation; } 에서 캠의 y에 대한 회전값을 가져와서 <0, 캠y회전값, 0> 오일러각으로 현재 플레이어의 회전 상태를 설정하잖아요? 그럼 만일 게임 도중에 뭐 폭발물에 의한다든가 이것저것 부가 기능을 넣어서 플레이어 캐릭터의 x나 z에 대한 회전값을 조작하는 경우가 있었다고 한다면 그럼에도 저 스크립트대로 둔다면, 플레이어 캐릭터가 x나 z 방향으로 기울어진 상태에서 플레이어가 마우스를 살짝 움직여주면 갑자기 바로 서 버려서 <0, 캠y회전값, 0>으로 오일러각이 설정돼 버리는 거 아닌가요?? 궁금합니다!